# Mtftp6Dxe

## Function Table

| Address | Name | Description |
|---------|------|-------------|
|  | **Mtftp6DriverEntryPoint** |  |
|  | **Mtftp6DriverBindingSupported** |  |
|  | **Mtftp6DriverBindingStart** |  |
|  | **Mtftp6DriverBindingStop** |  |
|  | **Mtftp6ServiceCreateChild** |  |
|  | **Mtftp6ServiceDestroyChild** |  |
|  | **Mtftp6GetModeData** |  |
|  | **Mtftp6Configure** |  |
|  | **Mtftp6ReadFile** |  |
|  | **Mtftp6WriteFile** |  |
|  | **Mtftp6ReadDirectory** |  |
|  | **Mtftp6Poll** |  |
|  | **Mtftp6RrqCallback** |  |
|  | **Mtftp6WrqCallback** |  |
|  | **Mtftp6MulticastCallback** |  |
|  | **Mtftp6TimeoutNotify** |  |
|  | **Mtftp6CleanupOperation** |  |
|  | **Mtftp6SendAck** |  |
|  | **Mtftp6SendError** |  |
|  | **Mtftp6DataProcess** |  |
|  | **Mtftp6SendRequest** |  |
|  | **Mtftp6Transmit** |  |
| Module | **globals** |  |
| EFI_HANDLE | **gImageHandle = NULL;** |  |
| Driver | **Binding Protocol instance table (off_9E50):** |  |
| EFI_DRIVER_BINDING_PROTOCOL | **mDriverBinding = {** |  |
| Component | **Name table (off_9E80):** |  |
| EFI_COMPONENT_NAME2_PROTOCOL | **mComponentName2 = {** |  |
| Service | **Binding Protocol instance (off_9E98):** |  |
| EFI_SERVICE_BINDING_PROTOCOL | **mServiceBinding = {** |  |
| MTFTP6 | **Protocol instance template (off_9ED0):** |  |
| EFI_MTFTP6_PROTOCOL | **mMtftp6ProtocolTemplate = {** |  |
| DRIVER | **ENTRY POINT (sub_528 + sub_698)** |  |
| Save | **global pointers and initialize library constructors** |  |
| gImageHandle | **= ImageHandle;** |  |
| Open | **DPC protocol (gEfiDpcProtocolGuid = {0x4F948815-...})** |  |
| Status | **= gBS->LocateProtocol (** |  |
| Read | **NetworkStackVar and install driver binding** |  |
| Variable | **exists -> install driver binding protocol** |  |
| Status | **= gBS->InstallMultipleProtocolInterfaces (** |  |
| DRIVER | **BINDING PROTOCOL** |  |
| Check | **if controller already has MTFTP6 service binding installed** |  |
| EFI_STATUS | **Status;** |  |
| Already | **has our protocol -> unsupported (already bound)** |  |
| Now | **try to create a child: open config protocol and create service** |  |
| Allocate | **a timer event for timeout handling** |  |
| Status | **= gBS->CreateEvent (** |  |
| Open | **UDP I/O for IPv6** |  |
| No | **RxNotify** |  |
| return | **EFI_UNSUPPORTED;  // Placeholder** |  |
| MTFTP6 | **PROTOCOL IMPLEMENTATION** |  |
| Allocates | **a MTFTP6_INSTANCE (280 bytes), copies config data** |  |
| opens | **UDP I/O from controller, returns mode info.** |  |
| return | **EFI_UNSUPPORTED;** |  |
| Marks | **instance as configured, sets up UDP I/O callback** |  |
| registration | **for Rx and Tx.** |  |
| Main | **read file entry:** |  |
| Main | **write file entry.** |  |
| Similar | **to ReadFile but uses WRQ operation.** |  |
| Not | **implemented (returns EFI_UNSUPPORTED)** |  |
| Polls | **for Rx events via UdpIoRecvDatagram / DPC queue drain.** |  |
| CALLBACK | **HANDLERS** |  |
| Main | **RRQ receive callback:** |  |
| Triggered | **by UdpIo when a datagram arrives.** |  |
| Main | **WRQ receive callback:** |  |
| Triggered | **by UdpIo when a datagram arrives during WRQ.** |  |
| Multicast | **reception callback.** |  |
| Handles | **data blocks arriving on the multicast socket.** |  |
| INTERNAL | **OPERATIONS** |  |
| Timer | **event callback:** |  |
| return | **EFI_SUCCESS;** |  |
| Cleans | **up an in-progress operation:** |  |
| Build | **and send an ACK packet:** |  |
| Build | **and send an ERROR packet:** |  |
| Process | **incoming DATA packet:** |  |
| Build | **the initial request packet (RRQ or WRQ):** |  |
| 2 | **(opcode) + len(filename) + 1 + len("octet") + 1 +** |  |
| sum | **for each option: len(optname)+1 + len(optval)+1** |  |
| Core | **transmit routine:** |  |

---
*Generated by HR650X BIOS Decompilation Project*