Difference between revisions of "Unit LAN78XX"
(One intermediate revision by the same user not shown) | |||
Line 3,568: | Line 3,568: | ||
---- | ---- | ||
− | |||
+ | '''Initialization functions''' | ||
+ | |||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;"> | ||
+ | <pre style="border: 0; padding-bottom:0px;">procedure LAN78XXInit;</pre> | ||
+ | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Initialize the LAN78XX unit, create and register the driver</div> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | ! Note | ||
+ | | Called only during system startup | ||
+ | |- | ||
+ | |} | ||
+ | </div></div> | ||
+ | <br /> | ||
+ | |||
+ | '''LAN78XX network functions''' | ||
+ | |||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;"> | ||
+ | <pre style="border: 0; padding-bottom:0px;">function LAN78XXNetworkOpen(Network:PNetworkDevice):LongWord;</pre> | ||
+ | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Implementation of NetworkDeviceOpen for the LAN78XX device</div> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | ! Note | ||
+ | | Not intended to be called directly by applications, use NetworkDeviceOpen instead. | ||
+ | |- | ||
+ | |} | ||
+ | </div></div> | ||
+ | <br /> | ||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;"> | ||
+ | <pre style="border: 0; padding-bottom:0px;">function LAN78XXNetworkClose(Network:PNetworkDevice):LongWord;</pre> | ||
+ | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Implementation of NetworkDeviceClose for the LAN78XX device</div> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | ! Note | ||
+ | | Not intended to be called directly by applications, use NetworkDeviceClose instead. | ||
+ | |- | ||
+ | |} | ||
+ | </div></div> | ||
+ | <br /> | ||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;"> | ||
+ | <pre style="border: 0; padding-bottom:0px;">function LAN78XXNetworkControl(Network:PNetworkDevice; Request:Integer; Argument1:PtrUInt; var Argument2:PtrUInt):LongWord;</pre> | ||
+ | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Implementation of NetworkDeviceControl for the LAN78XX device</div> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | ! Note | ||
+ | | Not intended to be called directly by applications, use NetworkDeviceControl instead. | ||
+ | |- | ||
+ | |} | ||
+ | </div></div> | ||
+ | <br /> | ||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;"> | ||
+ | <pre style="border: 0; padding-bottom:0px;">function LAN78XXBufferAllocate(Network:PNetworkDevice; var Entry:PNetworkEntry):LongWord;</pre> | ||
+ | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Implementation of NetworkBufferAllocate for the LAN78XX device</div> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | ! Note | ||
+ | | Not intended to be called directly by applications, use NetworkBufferAllocate instead. | ||
+ | |- | ||
+ | |} | ||
+ | </div></div> | ||
+ | <br /> | ||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;"> | ||
+ | <pre style="border: 0; padding-bottom:0px;">function LAN78XXBufferRelease(Network:PNetworkDevice; Entry:PNetworkEntry):LongWord;</pre> | ||
+ | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Implementation of NetworkBufferRelease for the LAN78XX device</div> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | ! Note | ||
+ | | Not intended to be called directly by applications, use NetworkBufferRelease instead. | ||
+ | |- | ||
+ | |} | ||
+ | </div></div> | ||
+ | <br /> | ||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;"> | ||
+ | <pre style="border: 0; padding-bottom:0px;">function LAN78XXBufferReceive(Network:PNetworkDevice; var Entry:PNetworkEntry):LongWord;</pre> | ||
+ | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Implementation of NetworkBufferReceive for the LAN78XX device</div> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | ! Note | ||
+ | | Not intended to be called directly by applications, use NetworkBufferReceive instead. | ||
+ | |- | ||
+ | |} | ||
+ | </div></div> | ||
+ | <br /> | ||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;"> | ||
+ | <pre style="border: 0; padding-bottom:0px;">function LAN78XXBufferTransmit(Network:PNetworkDevice; Entry:PNetworkEntry):LongWord;</pre> | ||
+ | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Implementation of NetworkBufferTransmit for the LAN78XX device</div> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | ! Note | ||
+ | | Not intended to be called directly by applications, use NetworkBufferTransmit instead. | ||
+ | |- | ||
+ | |} | ||
+ | </div></div> | ||
+ | <br /> | ||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;"> | ||
+ | <pre style="border: 0; padding-bottom:0px;">procedure LAN78XXTransmitStart(Network:PLAN78XXNetwork);</pre> | ||
+ | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Transmit start function for the LAN78XX Network device</div> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | ! Note | ||
+ | | Not intended to be called directly by applications | ||
+ | Caller must hold the network lock | ||
+ | |- | ||
+ | |} | ||
+ | </div></div> | ||
+ | <br /> | ||
+ | |||
+ | '''LAN78XX USB functions''' | ||
+ | |||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;"> | ||
+ | <pre style="border: 0; padding-bottom:0px;">function LAN78XXDriverBind(Device:PUSBDevice; Interrface:PUSBInterface):LongWord;</pre> | ||
+ | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Bind the LAN78XX driver to a USB device if it is suitable</div> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | ! Device | ||
+ | | The USB device to attempt to bind to | ||
+ | |- | ||
+ | ! Interrface | ||
+ | | The USB interface to attempt to bind to (or nil for whole device) | ||
+ | |- | ||
+ | ! Return | ||
+ | | USB_STATUS_SUCCESS if completed, USB_STATUS_DEVICE_UNSUPPORTED if unsupported or another error code on failure. | ||
+ | |- | ||
+ | |} | ||
+ | </div></div> | ||
+ | <br /> | ||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;"> | ||
+ | <pre style="border: 0; padding-bottom:0px;">function LAN78XXDriverUnbind(Device:PUSBDevice; Interrface:PUSBInterface):LongWord;</pre> | ||
+ | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Unbind the LAN78XX driver from a USB device</div> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | ! Device | ||
+ | | The USB device to unbind from | ||
+ | |- | ||
+ | ! Interrface | ||
+ | | The USB interface to unbind from (or nil for whole device) | ||
+ | |- | ||
+ | ! Return | ||
+ | | USB_STATUS_SUCCESS if completed or another error code on failure | ||
+ | |- | ||
+ | |} | ||
+ | </div></div> | ||
+ | <br /> | ||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;"> | ||
+ | <pre style="border: 0; padding-bottom:0px;">procedure LAN78XXReceiveWorker(Request:PUSBRequest);</pre> | ||
+ | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Called (by a Worker thread) to process a completed USB request from the LAN78XX bulk IN endpoint</div> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | ! Request | ||
+ | | The USB request which has completed | ||
+ | |- | ||
+ | |} | ||
+ | </div></div> | ||
+ | <br /> | ||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;"> | ||
+ | <pre style="border: 0; padding-bottom:0px;">procedure LAN78XXReceiveComplete(Request:PUSBRequest);</pre> | ||
+ | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Called when a USB request from the LAN78XX bulk IN endpoint completes</div> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | ! Request | ||
+ | | The USB request which has completed | ||
+ | |- | ||
+ | ! Note | ||
+ | | Request is passed to worker thread for processing to prevent blocking the USB completion | ||
+ | |- | ||
+ | |} | ||
+ | </div></div> | ||
+ | <br /> | ||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;"> | ||
+ | <pre style="border: 0; padding-bottom:0px;">procedure LAN78XXTransmitWorker(Request:PUSBRequest);</pre> | ||
+ | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Called (by a Worker thread) to process a completed USB request to the LAN78XX bulk OUT endpoint</div> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | ! Request | ||
+ | | The USB request which has completed | ||
+ | |- | ||
+ | |} | ||
+ | </div></div> | ||
+ | <br /> | ||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;"> | ||
+ | <pre style="border: 0; padding-bottom:0px;">procedure LAN78XXTransmitComplete(Request:PUSBRequest);</pre> | ||
+ | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Called when a USB request to the LAN78XX bulk OUT endpoint completes</div> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | ! Request | ||
+ | | The USB request which has completed | ||
+ | |- | ||
+ | ! Note | ||
+ | | Request is passed to worker thread for processing to prevent blocking the USB completion | ||
+ | |- | ||
+ | |} | ||
+ | </div></div> | ||
+ | <br /> | ||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;"> | ||
+ | <pre style="border: 0; padding-bottom:0px;">procedure LAN78XXInterruptWorker(Request:PUSBRequest);</pre> | ||
+ | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Called (by a Worker thread) to process a completed USB request from the LAN78XX interrupt IN endpoint</div> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | ! Request | ||
+ | | The USB request which has completed | ||
+ | |- | ||
+ | |} | ||
+ | </div></div> | ||
+ | <br /> | ||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;"> | ||
+ | <pre style="border: 0; padding-bottom:0px;">procedure LAN78XXInterruptComplete(Request:PUSBRequest);</pre> | ||
+ | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Called when a USB request from the LAN78XX interrupt IN endpoint completes</div> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | ! Request | ||
+ | | The USB request which has completed | ||
+ | |- | ||
+ | ! Note | ||
+ | | Request is passed to worker thread for processing to prevent blocking the USB completion | ||
+ | |- | ||
+ | |} | ||
+ | </div></div> | ||
+ | <br /> | ||
+ | |||
+ | '''LAN78XX helper functions''' | ||
+ | |||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;"> | ||
+ | <pre style="border: 0; padding-bottom:0px;">function LAN78XXCheckDevice(Device:PUSBDevice):LongWord;</pre> | ||
+ | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Check the Vendor and Device ID against the supported devices</div> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | ! Device | ||
+ | | USB device to check | ||
+ | |- | ||
+ | ! Return | ||
+ | | USB_STATUS_SUCCESS if completed or another error code on failure | ||
+ | |- | ||
+ | |} | ||
+ | </div></div> | ||
+ | <br /> | ||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;"> | ||
+ | <pre style="border: 0; padding-bottom:0px;">function LAN78XXReadRegister(Device:PUSBDevice; Index:LongWord; var Data:LongWord):LongWord;</pre> | ||
+ | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Read from a register on a LAN78XX USB Ethernet Adapter</div> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | ! Device | ||
+ | | USB device to read from | ||
+ | |- | ||
+ | ! Index | ||
+ | | Index of the register to read | ||
+ | |- | ||
+ | ! Data | ||
+ | | Value to return the register contents | ||
+ | |- | ||
+ | ! Return | ||
+ | | USB_STATUS_SUCCESS if completed or another error code on failure | ||
+ | |- | ||
+ | |} | ||
+ | </div></div> | ||
+ | <br /> | ||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;"> | ||
+ | <pre style="border: 0; padding-bottom:0px;">function LAN78XXWriteRegister(Device:PUSBDevice; Index,Data:LongWord):LongWord;</pre> | ||
+ | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Write to a register on a LAN78XX USB Ethernet Adapter</div> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | ! Device | ||
+ | | USB device to write to | ||
+ | |- | ||
+ | ! Index | ||
+ | | Index of the register to write | ||
+ | |- | ||
+ | ! Data | ||
+ | | Value to write to the register | ||
+ | |- | ||
+ | ! Return | ||
+ | | USB_STATUS_SUCCESS if completed or another error code on failure | ||
+ | |- | ||
+ | |} | ||
+ | </div></div> | ||
+ | <br /> | ||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;"> | ||
+ | <pre style="border: 0; padding-bottom:0px;">function LAN78XXModifyRegister(Device:PUSBDevice; Index,Mask,Value:LongWord):LongWord;</pre> | ||
+ | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Modify the value contained in a register on a LAN78XX USB Ethernet Adapter</div> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | ! Device | ||
+ | | USB device to modify | ||
+ | |- | ||
+ | ! Index | ||
+ | | Index of the register to modify | ||
+ | |- | ||
+ | ! Mask | ||
+ | | Mask that contains 1 for the bits where the old value in the register will be kept rather than cleared (unless those bits also appear in Value, in which case they will still be set). | ||
+ | |- | ||
+ | ! Value | ||
+ | | Mask of bits to set in the register | ||
+ | |- | ||
+ | ! Return | ||
+ | | USB_STATUS_SUCCESS if completed or another error code on failure | ||
+ | |- | ||
+ | |} | ||
+ | </div></div> | ||
+ | <br /> | ||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;"> | ||
+ | <pre style="border: 0; padding-bottom:0px;">function LAN78XXSetRegisterBits(Device:PUSBDevice; Index,Value:LongWord):LongWord;</pre> | ||
+ | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Set bits in a register on a LAN78XX USB Ethernet Adapter</div> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | ! Device | ||
+ | | USB device to write to | ||
+ | |- | ||
+ | ! Index | ||
+ | | Index of the register to modify | ||
+ | |- | ||
+ | ! Value | ||
+ | | Bits to set in the register. At positions where there is a 0, the old value in the register will be written. | ||
+ | |- | ||
+ | ! Return | ||
+ | | USB_STATUS_SUCCESS if completed or another error code on failure | ||
+ | |- | ||
+ | |} | ||
+ | </div></div> | ||
+ | <br /> | ||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;"> | ||
+ | <pre style="border: 0; padding-bottom:0px;">function LAN78XXClearRegisterBits(Device:PUSBDevice; Index,Value:LongWord):LongWord;</pre> | ||
+ | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Clear bits in a register on a LAN78XX USB Ethernet Adapter</div> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | ! Device | ||
+ | | USB device to write to | ||
+ | |- | ||
+ | ! Index | ||
+ | | Index of the register to modify | ||
+ | |- | ||
+ | ! Value | ||
+ | | Bits to clear in the register. At positions where there is a 0, the old value in the register will be written. | ||
+ | |- | ||
+ | ! Return | ||
+ | | USB_STATUS_SUCCESS if completed or another error code on failure | ||
+ | |- | ||
+ | |} | ||
+ | </div></div> | ||
+ | <br /> | ||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;"> | ||
+ | <pre style="border: 0; padding-bottom:0px;">function LAN78XXPHYRead(Device:PUSBDevice; Index:LongWord; var Value:Word):LongWord;</pre> | ||
+ | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Read a register from the MII Management serial interface on a LAN78XX USB Ethernet Adapter</div> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | ! Device | ||
+ | | USB device to read from | ||
+ | |- | ||
+ | ! Index | ||
+ | | Index of the register to read | ||
+ | |- | ||
+ | ! Value | ||
+ | | Value to return the register contents | ||
+ | |- | ||
+ | ! Return | ||
+ | | USB_STATUS_SUCCESS if completed or another error code on failure | ||
+ | |- | ||
+ | |} | ||
+ | </div></div> | ||
+ | <br /> | ||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;"> | ||
+ | <pre style="border: 0; padding-bottom:0px;">function LAN78XXPHYWrite(Device:PUSBDevice; Index:LongWord; Value:Word):LongWord;</pre> | ||
+ | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Write a register to the MII Management serial interface on a LAN78XX USB Ethernet Adapter</div> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | ! Device | ||
+ | | USB device to write to | ||
+ | |- | ||
+ | ! Index | ||
+ | | Index of the register to write | ||
+ | |- | ||
+ | ! Value | ||
+ | | Value to write to the register | ||
+ | |- | ||
+ | ! Return | ||
+ | | USB_STATUS_SUCCESS if completed or another error code on failure | ||
+ | |- | ||
+ | |} | ||
+ | </div></div> | ||
+ | <br /> | ||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;"> | ||
+ | <pre style="border: 0; padding-bottom:0px;">function LAN78XXPHYInitialize(Device:PUSBDevice):LongWord;</pre> | ||
+ | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Initialize default MII Management serial interface options on a LAN78XX USB Ethernet Adapter</div> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | ! Device | ||
+ | | USB device to initialize | ||
+ | |- | ||
+ | ! Return | ||
+ | | USB_STATUS_SUCCESS if completed or another error code on failure | ||
+ | |- | ||
+ | |} | ||
+ | </div></div> | ||
+ | <br /> | ||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;"> | ||
+ | <pre style="border: 0; padding-bottom:0px;">function LAN78XXPHYWaitNotBusy(Device:PUSBDevice):LongWord;</pre> | ||
+ | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Wait for the MII Management serial interface to be not busy on a LAN78XX USB Ethernet Adapter</div> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | ! Device | ||
+ | | USB device to wait for | ||
+ | |- | ||
+ | ! Return | ||
+ | | USB_STATUS_SUCCESS if completed or another error code on failure | ||
+ | |- | ||
+ | ! Note | ||
+ | | Caller must hold the PHY Lock | ||
+ | |- | ||
+ | |} | ||
+ | </div></div> | ||
+ | <br /> | ||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;"> | ||
+ | <pre style="border: 0; padding-bottom:0px;">function LAN78XXReadEEPROM(Device:PUSBDevice; Offset,Length:LongWord; Data:PByte):LongWord;</pre> | ||
+ | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Read from the EEPROM (if present) on a LAN78XX USB Ethernet Adapter</div> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | ! Device | ||
+ | | USB device to read from | ||
+ | |- | ||
+ | ! Offset | ||
+ | | The byte offset to start reading | ||
+ | |- | ||
+ | ! Length | ||
+ | | The number of bytes to read | ||
+ | |- | ||
+ | ! Data | ||
+ | | Pointer to a buffer to receive the data | ||
+ | |- | ||
+ | ! Return | ||
+ | | USB_STATUS_SUCCESS if completed or another error code on failure | ||
+ | |- | ||
+ | |} | ||
+ | </div></div> | ||
+ | <br /> | ||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;"> | ||
+ | <pre style="border: 0; padding-bottom:0px;">function LAN78XXReadRawEEPROM(Device:PUSBDevice; Offset,Length:LongWord; Data:PByte):LongWord;</pre> | ||
+ | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Read from the EEPROM (if present) without signature check on a LAN78XX USB Ethernet Adapter</div> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | ! Device | ||
+ | | USB device to read from | ||
+ | |- | ||
+ | ! Offset | ||
+ | | The byte offset to start reading | ||
+ | |- | ||
+ | ! Length | ||
+ | | The number of bytes to read | ||
+ | |- | ||
+ | ! Data | ||
+ | | Pointer to a buffer to receive the data | ||
+ | |- | ||
+ | ! Return | ||
+ | | USB_STATUS_SUCCESS if completed or another error code on failure | ||
+ | |- | ||
+ | |} | ||
+ | </div></div> | ||
+ | <br /> | ||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;"> | ||
+ | <pre style="border: 0; padding-bottom:0px;">function LAN78XXReadOTP(Device:PUSBDevice; Offset,Length:LongWord; Data:PByte):LongWord;</pre> | ||
+ | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Read from the OTP (if present) on a LAN78XX USB Ethernet Adapter</div> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | ! Device | ||
+ | | USB device to read from | ||
+ | |- | ||
+ | ! Offset | ||
+ | | The byte offset to start reading | ||
+ | |- | ||
+ | ! Length | ||
+ | | The number of bytes to read | ||
+ | |- | ||
+ | ! Data | ||
+ | | Pointer to a buffer to receive the data | ||
+ | |- | ||
+ | ! Return | ||
+ | | USB_STATUS_SUCCESS if completed or another error code on failure | ||
+ | |- | ||
+ | |} | ||
+ | </div></div> | ||
+ | <br /> | ||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;"> | ||
+ | <pre style="border: 0; padding-bottom:0px;">function LAN78XXReadRawOTP(Device:PUSBDevice; Offset,Length:LongWord; Data:PByte):LongWord;</pre> | ||
+ | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Read from the OTP (if present) without signature check on a LAN78XX USB Ethernet Adapter</div> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | ! Device | ||
+ | | USB device to read from | ||
+ | |- | ||
+ | ! Offset | ||
+ | | The byte offset to start reading | ||
+ | |- | ||
+ | ! Length | ||
+ | | The number of bytes to read | ||
+ | |- | ||
+ | ! Data | ||
+ | | Pointer to a buffer to receive the data | ||
+ | |- | ||
+ | ! Return | ||
+ | | USB_STATUS_SUCCESS if completed or another error code on failure | ||
+ | |- | ||
+ | |} | ||
+ | </div></div> | ||
+ | <br /> | ||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;"> | ||
+ | <pre style="border: 0; padding-bottom:0px;">function LAN78XXGetStatistics(Device:PUSBDevice; var Statistics:TLAN78XXStatistics):LongWord;</pre> | ||
+ | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Get the statistics from a LAN78XX USB Ethernet Adapter</div> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | ! Device | ||
+ | | USB device to read from | ||
+ | |- | ||
+ | ! Statistics | ||
+ | | The returned statistics from the device | ||
+ | |- | ||
+ | ! Return | ||
+ | | USB_STATUS_SUCCESS if completed or another error code on failure | ||
+ | |- | ||
+ | |} | ||
+ | </div></div> | ||
+ | <br /> | ||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;"> | ||
+ | <pre style="border: 0; padding-bottom:0px;">function LAN78XXGetMacAddress(Device:PUSBDevice; Address:PHardwareAddress):LongWord;</pre> | ||
+ | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Get the MAC address of a LAN78XX USB Ethernet Adapter</div> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | ! Device | ||
+ | | USB device read from | ||
+ | |- | ||
+ | ! Address | ||
+ | | Value to read the MAC address into | ||
+ | |- | ||
+ | ! Return | ||
+ | | USB_STATUS_SUCCESS if completed or another error code on failure | ||
+ | |- | ||
+ | |} | ||
+ | </div></div> | ||
+ | <br /> | ||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;"> | ||
+ | <pre style="border: 0; padding-bottom:0px;">function LAN78XXSetMacAddress(Device:PUSBDevice; Address:PHardwareAddress):LongWord;</pre> | ||
+ | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Set the MAC address of a LAN78XX USB Ethernet Adapter</div> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | ! Device | ||
+ | | USB device to write to | ||
+ | |- | ||
+ | ! Address | ||
+ | | MAC address value to set | ||
+ | |- | ||
+ | ! Return | ||
+ | | USB_STATUS_SUCCESS if completed or another error code on failure | ||
+ | |- | ||
+ | |} | ||
+ | </div></div> | ||
+ | <br /> | ||
Return to [[Unit_Reference|Unit Reference]] | Return to [[Unit_Reference|Unit Reference]] |
Latest revision as of 04:33, 24 April 2018
Return to Unit Reference
Description
Microchip LAN78xx USB Ethernet Driver unit
The Microchip LAN78xx is a USB 3.1 to 10/100/1000 Gigabit Ethernet bridge device which supports 10BASE-T, 100BASE-TX and 1000BASE-T. Both USB 2.0 High Speed and USB 3.1 Super Speed interfaces are supported using a pair of Bulk Endpoints and an Interrupt Endpoint for signalling status changes and other events. The Raspberry Pi 3B+ contains a variant of this device called a LAN7515 which is a combination device containing a LAN78xx Gigabit Ethernet controller and two 4 port USB 2.0 compatible hubs. The hubs will be detected and bound by the default USB Hub driver when they are enumerated by the USB core.
Constants
LAN78XX_*
LAN78XX_NETWORK_DESCRIPTION = 'Microchip LAN78XX USB Ethernet Adapter';
|
Description of LAN78XX device |
LAN78XX_DRIVER_NAME = 'Microchip LAN78XX USB Ethernet Adapter Driver';
|
Name of LAN78XX driver |
LAN78XX_USB_VENDOR_ID = $0424;
|
|
LAN7800_USB_PRODUCT_ID= $7800;
|
|
LAN7850_USB_PRODUCT_ID = $7850;
|
|
LAN78XX_DEVICE_ID_COUNT = 2;
|
Number of supported Device IDs |
LAN78XX_DEVICE_ID:array[0..LAN78XX_DEVICE_ID_COUNT - 1] of TUSBDeviceId = (
| |
(idVendor:LAN78XX_USB_VENDOR_ID;idProduct:LAN7800_USB_PRODUCT_ID),
|
LAN7800/7801 |
(idVendor:LAN78XX_USB_VENDOR_ID;idProduct:LAN7850_USB_PRODUCT_ID));
|
LAN7850 |
LAN78XX_SS_USB_PKT_SIZE = 1024;
|
|
LAN78XX_HS_USB_PKT_SIZE = 512;
|
|
LAN78XX_FS_USB_PKT_SIZE = 64;
|
|
LAN78XX_MAX_RX_FIFO_SIZE = 12 * 1024;
|
Maximum size 12KB |
LAN78XX_MAX_TX_FIFO_SIZE = 12 * 1024;
|
Maximum size 12KB |
LAN78XX_DEFAULT_BURST_CAP_SIZE = 32 * 1024;
|
Originally LAN78XX_MAX_RX_FIFO_SIZE (12 * 1024) |
LAN78XX_DEFAULT_BULK_IN_DELAY = $0800;
|
2048 x 16.667 ns = 34.133 us |
LAN78XX_MAX_SINGLE_PACKET_SIZE = 9000;
|
|
LAN78XX_TX_OVERHEAD = 8;
|
TX Command A + TX Command B |
LAN78XX_RX_OVERHEAD = 10;
|
RX Command A + RX Command B + RX Command C |
LAN78XX_RXW_PADDING = 2;
|
|
LAN78XX_RX_MAX_QUEUE_MEMORY = 512 * (ETHERNET_MAX_PACKET_SIZE + LAN78XX_RX_OVERHEAD);
|
Originally 60 * 1518 |
LAN78XX_TX_MAX_QUEUE_MEMORY = 64 * (ETHERNET_MAX_PACKET_SIZE + LAN78XX_TX_OVERHEAD);
|
Originally 60 * 1518 |
LAN78XX_EEPROM_MAGIC = $78A5;
|
|
LAN78XX_OTP_MAGIC = $78F3;
|
|
LAN78XX_PHY_ADDRESS = 1;
|
|
LAN78XX_EEPROM_INDICATOR = $A5;
|
|
LAN78XX_EEPROM_MAC_OFFSET = $01;
|
|
LAN78XX_MAX_EEPROM_SIZE = 512;
|
|
LAN78XX_OTP_INDICATOR_1 = $F3;
|
|
LAN78XX_OTP_INDICATOR_2 = $F7;
|
LAN78XX_USB_VENDOR_*
LAN78XX_USB_VENDOR_REQUEST_WRITE_REGISTER = $A0;
|
|
LAN78XX_USB_VENDOR_REQUEST_READ_REGISTER = $A1;
|
|
LAN78XX_USB_VENDOR_REQUEST_GET_STATS = $A2;
|
LAN78XX_INT_ENP_*
LAN78XX_INT_ENP_EEE_START_TX_LPI_INT = (1 shl 26);
|
|
LAN78XX_INT_ENP_EEE_STOP_TX_LPI_INT = (1 shl 25);
|
|
LAN78XX_INT_ENP_EEE_RX_LPI_INT = (1 shl 24);
|
|
LAN78XX_INT_ENP_RDFO_INT = (1 shl 22);
|
|
LAN78XX_INT_ENP_TXE_INT = (1 shl 21);
|
|
LAN78XX_INT_ENP_TX_DIS_INT = (1 shl 19);
|
|
LAN78XX_INT_ENP_RX_DIS_INT = (1 shl 18);
|
|
LAN78XX_INT_ENP_PHY_INT = (1 shl 17);
|
|
LAN78XX_INT_ENP_DP_INT = (1 shl 16);
|
|
LAN78XX_INT_ENP_MAC_ERR_INT = (1 shl 15);
|
|
LAN78XX_INT_ENP_TDFU_INT = (1 shl 14);
|
|
LAN78XX_INT_ENP_TDFO_INT = (1 shl 13);
|
|
LAN78XX_INT_ENP_UTX_FP_INT = (1 shl 12);
|
LAN78XX_*_PKT_ALIGNMENT
LAN78XX_TX_PKT_ALIGNMENT = 4;
|
|
LAN78XX_RX_PKT_ALIGNMENT = 4;
|
LAN78XX_TX_CMD_A_*
LAN78XX_TX_CMD_A_IGE = $20000000;
|
|
LAN78XX_TX_CMD_A_ICE = $10000000;
|
|
LAN78XX_TX_CMD_A_LSO = $08000000;
|
|
LAN78XX_TX_CMD_A_IPE = $04000000;
|
|
LAN78XX_TX_CMD_A_TPE = $02000000;
|
|
LAN78XX_TX_CMD_A_IVTG = $01000000;
|
|
LAN78XX_TX_CMD_A_RVTG = $00800000;
|
|
LAN78XX_TX_CMD_A_FCS = $00400000;
|
|
LAN78XX_TX_CMD_A_LEN_MASK = $000FFFFF;
|
LAN78XX_TX_CMD_B_*
LAN78XX_TX_CMD_B_MSS_SHIFT = 16;
|
|
LAN78XX_TX_CMD_B_MSS_MASK = $3FFF0000;
|
|
LAN78XX_TX_CMD_B_MSS_MIN = 8;
|
|
LAN78XX_TX_CMD_B_VTAG_MASK = $0000FFFF;
|
|
LAN78XX_TX_CMD_B_VTAG_PRI_MASK = $0000E000;
|
|
LAN78XX_TX_CMD_B_VTAG_CFI_MASK = $00001000;
|
|
LAN78XX_TX_CMD_B_VTAG_VID_MASK = $00000FFF;
|
LAN78XX_RX_CMD_A_*
LAN78XX_RX_CMD_A_ICE = $80000000;
|
|
LAN78XX_RX_CMD_A_TCE = $40000000;
|
|
LAN78XX_RX_CMD_A_CSE_MASK = $C0000000;
|
|
LAN78XX_RX_CMD_A_IPV = $20000000;
|
|
LAN78XX_RX_CMD_A_PID_MASK = $18000000;
|
|
LAN78XX_RX_CMD_A_PID_NONE_IP = $00000000;
|
|
LAN78XX_RX_CMD_A_PID_TCP_IP = $08000000;
|
|
LAN78XX_RX_CMD_A_PID_UDP_IP = $10000000;
|
|
LAN78XX_RX_CMD_A_PID_IP = $18000000;
|
|
LAN78XX_RX_CMD_A_PFF = $04000000;
|
|
LAN78XX_RX_CMD_A_BAM = $02000000;
|
|
LAN78XX_RX_CMD_A_MAM = $01000000;
|
|
LAN78XX_RX_CMD_A_FVTG = $00800000;
|
|
LAN78XX_RX_CMD_A_RED = $00400000;
|
|
LAN78XX_RX_CMD_A_RX_ERRS_MASK = $C03F0000;
|
|
LAN78XX_RX_CMD_A_RWT = $00200000;
|
|
LAN78XX_RX_CMD_A_RUNT = $00100000;
|
|
LAN78XX_RX_CMD_A_LONG = $00080000;
|
|
LAN78XX_RX_CMD_A_RXE = $00040000;
|
|
LAN78XX_RX_CMD_A_DRB = $00020000;
|
|
LAN78XX_RX_CMD_A_FCS = $00010000;
|
|
LAN78XX_RX_CMD_A_UAM = $00008000;
|
|
LAN78XX_RX_CMD_A_ICSM = $00004000;
|
|
LAN78XX_RX_CMD_A_LEN_MASK = $00003FFF;
|
LAN78XX_RX_CMD_B_*
LAN78XX_RX_CMD_B_CSUM_SHIFT = 16;
|
|
LAN78XX_RX_CMD_B_CSUM_MASK = $FFFF0000;
|
|
LAN78XX_RX_CMD_B_VTAG_MASK = $0000FFFF;
|
|
LAN78XX_RX_CMD_B_VTAG_PRI_MASK = $0000E000;
|
|
LAN78XX_RX_CMD_B_VTAG_CFI_MASK = $00001000;
|
|
LAN78XX_RX_CMD_B_VTAG_VID_MASK = $00000FFF;
|
LAN78XX_RX_CMD_C_*
LAN78XX_RX_CMD_C_WAKE_SHIFT = 15;
|
|
LAN78XX_RX_CMD_C_WAKE = $8000;
|
|
LAN78XX_RX_CMD_C_REF_FAIL_SHIFT = 14;
|
|
LAN78XX_RX_CMD_C_REF_FAIL = $4000;
|
LAN78XX_NUMBER_*
LAN78XX_NUMBER_OF_REGS = 193;
|
LAN78XX_ID_REV_*
LAN78XX_ID_REV = $00;
|
|
LAN78XX_ID_REV_CHIP_ID_MASK = $FFFF0000;
|
|
LAN78XX_ID_REV_CHIP_REV_MASK = $0000FFFF;
|
|
LAN78XX_ID_REV_CHIP_ID_7800 = $7800;
|
|
LAN78XX_ID_REV_CHIP_ID_7850 = $7850;
|
LAN78XX_FPGA_REV_*
LAN78XX_FPGA_REV = $04;
|
|
LAN78XX_FPGA_REV_MINOR_MASK = $0000FF00;
|
|
LAN78XX_FPGA_REV_MAJOR_MASK = $000000FF;
|
LAN78XX_INT_STS_*
LAN78XX_INT_STS = $0C;
|
|
LAN78XX_INT_STS_CLEAR_ALL = $FFFFFFFF;
|
|
LAN78XX_INT_STS_EEE_TX_LPI_STRT = $04000000;
|
|
LAN78XX_INT_STS_EEE_TX_LPI_STOP = $02000000;
|
|
LAN78XX_INT_STS_EEE_RX_LPI = $01000000;
|
|
LAN78XX_INT_STS_RDFO = $00400000;
|
|
LAN78XX_INT_STS_TXE = $00200000;
|
|
LAN78XX_INT_STS_TX_DIS = $00080000;
|
|
LAN78XX_INT_STS_RX_DIS = $00040000;
|
|
LAN78XX_INT_STS_PHY_INT = $00020000;
|
|
LAN78XX_INT_STS_DP_INT = $00010000;
|
|
LAN78XX_INT_STS_MAC_ERR = $00008000;
|
|
LAN78XX_INT_STS_TDFU = $00004000;
|
|
LAN78XX_INT_STS_TDFO = $00002000;
|
|
LAN78XX_INT_STS_UFX_FP = $00001000;
|
|
LAN78XX_INT_STS_GPIO_MASK = $00000FFF;
|
|
LAN78XX_INT_STS_GPIO11 = $00000800;
|
|
LAN78XX_INT_STS_GPIO10 = $00000400;
|
|
LAN78XX_INT_STS_GPIO9 = $00000200;
|
|
LAN78XX_INT_STS_GPIO8 = $00000100;
|
|
LAN78XX_INT_STS_GPIO7 = $00000080;
|
|
LAN78XX_INT_STS_GPIO6 = $00000040;
|
|
LAN78XX_INT_STS_GPIO5 = $00000020;
|
|
LAN78XX_INT_STS_GPIO4 = $00000010;
|
|
LAN78XX_INT_STS_GPIO3 = $00000008;
|
|
LAN78XX_INT_STS_GPIO2 = $00000004;
|
|
LAN78XX_INT_STS_GPIO1 = $00000002;
|
|
LAN78XX_INT_STS_GPIO0 = $00000001;
|
LAN78XX_HW_CFG_*
LAN78XX_HW_CFG = $010;
|
|
LAN78XX_HW_CFG_CLK125_EN = $02000000;
|
|
LAN78XX_HW_CFG_REFCLK25_EN = $01000000;
|
|
LAN78XX_HW_CFG_LED3_EN = $00800000;
|
|
LAN78XX_HW_CFG_LED2_EN = $00400000;
|
|
LAN78XX_HW_CFG_LED1_EN = $00200000;
|
|
LAN78XX_HW_CFG_LED0_EN = $00100000;
|
|
LAN78XX_HW_CFG_EEE_PHY_LUSU = $00020000;
|
|
LAN78XX_HW_CFG_EEE_TSU = $00010000;
|
|
LAN78XX_HW_CFG_NETDET_STS = $00008000;
|
|
LAN78XX_HW_CFG_NETDET_EN = $00004000;
|
|
LAN78XX_HW_CFG_EEM = $00002000;
|
|
LAN78XX_HW_CFG_RST_PROTECT = $00001000;
|
|
LAN78XX_HW_CFG_CONNECT_BUF = $00000400;
|
|
LAN78XX_HW_CFG_CONNECT_EN = $00000200;
|
|
LAN78XX_HW_CFG_CONNECT_POL = $00000100;
|
|
LAN78XX_HW_CFG_SUSPEND_N_SEL_MASK = $000000C0;
|
|
LAN78XX_HW_CFG_SUSPEND_N_SEL_2 = $00000000;
|
|
LAN78XX_HW_CFG_SUSPEND_N_SEL_12N = $00000040;
|
|
LAN78XX_HW_CFG_SUSPEND_N_SEL_012N = $00000080;
|
|
LAN78XX_HW_CFG_SUSPEND_N_SEL_0123N = $000000C0;
|
|
LAN78XX_HW_CFG_SUSPEND_N_POL = $00000020;
|
|
LAN78XX_HW_CFG_MEF = $00000010;
|
|
LAN78XX_HW_CFG_ETC = $00000008;
|
|
LAN78XX_HW_CFG_LRST = $00000002;
|
|
LAN78XX_HW_CFG_SRST = $00000001;
|
LAN78XX_PMT_CTL_*
LAN78XX_PMT_CTL = $014;
|
|
LAN78XX_PMT_CTL_EEE_WAKEUP_EN = $00002000;
|
|
LAN78XX_PMT_CTL_EEE_WUPS = $00001000;
|
|
LAN78XX_PMT_CTL_MAC_SRST = $00000800;
|
|
LAN78XX_PMT_CTL_PHY_PWRUP = $00000400;
|
|
LAN78XX_PMT_CTL_RES_CLR_WKP_MASK = $00000300;
|
|
LAN78XX_PMT_CTL_RES_CLR_WKP_STS = $00000200;
|
|
LAN78XX_PMT_CTL_RES_CLR_WKP_EN = $00000100;
|
|
LAN78XX_PMT_CTL_READY = $00000080;
|
|
LAN78XX_PMT_CTL_SUS_MODE_MASK = $00000060;
|
|
LAN78XX_PMT_CTL_SUS_MODE_0 = $00000000;
|
|
LAN78XX_PMT_CTL_SUS_MODE_1 = $00000020;
|
|
LAN78XX_PMT_CTL_SUS_MODE_2 = $00000040;
|
|
LAN78XX_PMT_CTL_SUS_MODE_3 = $00000060;
|
|
LAN78XX_PMT_CTL_PHY_RST = $00000010;
|
|
LAN78XX_PMT_CTL_WOL_EN = $00000008;
|
|
LAN78XX_PMT_CTL_PHY_WAKE_EN = $00000004;
|
|
LAN78XX_PMT_CTL_WUPS_MASK = $00000003;
|
|
LAN78XX_PMT_CTL_WUPS_MLT = $00000003;
|
|
LAN78XX_PMT_CTL_WUPS_MAC = $00000002;
|
|
LAN78XX_PMT_CTL_WUPS_PHY = $00000001;
|
LAN78XX_GPIO_CFG0_*
LAN78XX_GPIO_CFG0 = $018;
|
|
LAN78XX_GPIO_CFG0_GPIOEN_MASK = $0000F000;
|
|
LAN78XX_GPIO_CFG0_GPIOEN3 = $00008000;
|
|
LAN78XX_GPIO_CFG0_GPIOEN2 = $00004000;
|
|
LAN78XX_GPIO_CFG0_GPIOEN1 = $00002000;
|
|
LAN78XX_GPIO_CFG0_GPIOEN0 = $00001000;
|
|
LAN78XX_GPIO_CFG0_GPIOBUF_MASK = $00000F00;
|
|
LAN78XX_GPIO_CFG0_GPIOBUF3 = $00000800;
|
|
LAN78XX_GPIO_CFG0_GPIOBUF2 = $00000400;
|
|
LAN78XX_GPIO_CFG0_GPIOBUF1 = $00000200;
|
|
LAN78XX_GPIO_CFG0_GPIOBUF0 = $00000100;
|
|
LAN78XX_GPIO_CFG0_GPIODIR_MASK = $000000F0;
|
|
LAN78XX_GPIO_CFG0_GPIODIR3 = $00000080;
|
|
LAN78XX_GPIO_CFG0_GPIODIR2 = $00000040;
|
|
LAN78XX_GPIO_CFG0_GPIODIR1 = $00000020;
|
|
LAN78XX_GPIO_CFG0_GPIODIR0 = $00000010;
|
|
LAN78XX_GPIO_CFG0_GPIOD_MASK = $0000000F;
|
|
LAN78XX_GPIO_CFG0_GPIOD3 = $00000008;
|
|
LAN78XX_GPIO_CFG0_GPIOD2 = $00000004;
|
|
LAN78XX_GPIO_CFG0_GPIOD1 = $00000002;
|
|
LAN78XX_GPIO_CFG0_GPIOD0 = $00000001;
|
LAN78XX_GPIO_CFG1_*
LAN78XX_GPIO_CFG1 = $01C;
|
|
LAN78XX_GPIO_CFG1_GPIOEN_MASK = $FF000000;
|
|
LAN78XX_GPIO_CFG1_GPIOEN11 = $80000000;
|
|
LAN78XX_GPIO_CFG1_GPIOEN10 = $40000000;
|
|
LAN78XX_GPIO_CFG1_GPIOEN9 = $20000000;
|
|
LAN78XX_GPIO_CFG1_GPIOEN8 = $10000000;
|
|
LAN78XX_GPIO_CFG1_GPIOEN7 = $08000000;
|
|
LAN78XX_GPIO_CFG1_GPIOEN6 = $04000000;
|
|
LAN78XX_GPIO_CFG1_GPIOEN5 = $02000000;
|
|
LAN78XX_GPIO_CFG1_GPIOEN4 = $01000000;
|
|
LAN78XX_GPIO_CFG1_GPIOBUF_MASK = $00FF0000;
|
|
LAN78XX_GPIO_CFG1_GPIOBUF11 = $00800000;
|
|
LAN78XX_GPIO_CFG1_GPIOBUF10 = $00400000;
|
|
LAN78XX_GPIO_CFG1_GPIOBUF9 = $00200000;
|
|
LAN78XX_GPIO_CFG1_GPIOBUF8 = $00100000;
|
|
LAN78XX_GPIO_CFG1_GPIOBUF7 = $00080000;
|
|
LAN78XX_GPIO_CFG1_GPIOBUF6 = $00040000;
|
|
LAN78XX_GPIO_CFG1_GPIOBUF5 = $00020000;
|
|
LAN78XX_GPIO_CFG1_GPIOBUF4 = $00010000;
|
|
LAN78XX_GPIO_CFG1_GPIODIR_MASK = $0000FF00;
|
|
LAN78XX_GPIO_CFG1_GPIODIR11 = $00008000;
|
|
LAN78XX_GPIO_CFG1_GPIODIR10 = $00004000;
|
|
LAN78XX_GPIO_CFG1_GPIODIR9 = $00002000;
|
|
LAN78XX_GPIO_CFG1_GPIODIR8 = $00001000;
|
|
LAN78XX_GPIO_CFG1_GPIODIR7 = $00000800;
|
|
LAN78XX_GPIO_CFG1_GPIODIR6 = $00000400;
|
|
LAN78XX_GPIO_CFG1_GPIODIR5 = $00000200;
|
|
LAN78XX_GPIO_CFG1_GPIODIR4 = $00000100;
|
|
LAN78XX_GPIO_CFG1_GPIOD_MASK = $000000FF;
|
|
LAN78XX_GPIO_CFG1_GPIOD11 = $00000080;
|
|
LAN78XX_GPIO_CFG1_GPIOD10 = $00000040;
|
|
LAN78XX_GPIO_CFG1_GPIOD9 = $00000020;
|
|
LAN78XX_GPIO_CFG1_GPIOD8 = $00000010;
|
|
LAN78XX_GPIO_CFG1_GPIOD7 = $00000008;
|
|
LAN78XX_GPIO_CFG1_GPIOD6 = $00000004;
|
|
LAN78XX_GPIO_CFG1_GPIOD5 = $00000002;
|
|
LAN78XX_GPIO_CFG1_GPIOD4 = $00000001;
|
LAN78XX_GPIO_WAKE_*
LAN78XX_GPIO_WAKE = $020;
|
|
LAN78XX_GPIO_WAKE_GPIOPOL_MASK = $0FFF0000;
|
|
LAN78XX_GPIO_WAKE_GPIOPOL11 = $08000000;
|
|
LAN78XX_GPIO_WAKE_GPIOPOL10 = $04000000;
|
|
LAN78XX_GPIO_WAKE_GPIOPOL9 = $02000000;
|
|
LAN78XX_GPIO_WAKE_GPIOPOL8 = $01000000;
|
|
LAN78XX_GPIO_WAKE_GPIOPOL7 = $00800000;
|
|
LAN78XX_GPIO_WAKE_GPIOPOL6 = $00400000;
|
|
LAN78XX_GPIO_WAKE_GPIOPOL5 = $00200000;
|
|
LAN78XX_GPIO_WAKE_GPIOPOL4 = $00100000;
|
|
LAN78XX_GPIO_WAKE_GPIOPOL3 = $00080000;
|
|
LAN78XX_GPIO_WAKE_GPIOPOL2 = $00040000;
|
|
LAN78XX_GPIO_WAKE_GPIOPOL1 = $00020000;
|
|
LAN78XX_GPIO_WAKE_GPIOPOL0 = $00010000;
|
|
LAN78XX_GPIO_WAKE_GPIOWK_MASK = $00000FFF;
|
|
LAN78XX_GPIO_WAKE_GPIOWK11 = $00000800;
|
|
LAN78XX_GPIO_WAKE_GPIOWK10 = $00000400;
|
|
LAN78XX_GPIO_WAKE_GPIOWK9 = $00000200;
|
|
LAN78XX_GPIO_WAKE_GPIOWK8 = $00000100;
|
|
LAN78XX_GPIO_WAKE_GPIOWK7 = $00000080;
|
|
LAN78XX_GPIO_WAKE_GPIOWK6 = $00000040;
|
|
LAN78XX_GPIO_WAKE_GPIOWK5 = $00000020;
|
|
LAN78XX_GPIO_WAKE_GPIOWK4 = $00000010;
|
|
LAN78XX_GPIO_WAKE_GPIOWK3 = $00000008;
|
|
LAN78XX_GPIO_WAKE_GPIOWK2 = $00000004;
|
|
LAN78XX_GPIO_WAKE_GPIOWK1 = $00000002;
|
|
LAN78XX_GPIO_WAKE_GPIOWK0 = $00000001;
|
LAN78XX_DP_SEL_*
LAN78XX_DP_SEL = $024;
|
|
LAN78XX_DP_SEL_DPRDY = $80000000;
|
|
LAN78XX_DP_SEL_RSEL_MASK = $0000000F;
|
|
LAN78XX_DP_SEL_RSEL_USB_PHY_CSRS = $0000000F;
|
|
LAN78XX_DP_SEL_RSEL_OTP_64BIT = $00000009;
|
|
LAN78XX_DP_SEL_RSEL_OTP_8BIT = $00000008;
|
|
LAN78XX_DP_SEL_RSEL_UTX_BUF_RAM = $00000007;
|
|
LAN78XX_DP_SEL_RSEL_DESC_RAM = $00000005;
|
|
LAN78XX_DP_SEL_RSEL_TXFIFO = $00000004;
|
|
LAN78XX_DP_SEL_RSEL_RXFIFO = $00000003;
|
|
LAN78XX_DP_SEL_RSEL_LSO = $00000002;
|
|
LAN78XX_DP_SEL_RSEL_VLAN_DA = $00000001;
|
|
LAN78XX_DP_SEL_RSEL_URXBUF = $00000000;
|
|
LAN78XX_DP_SEL_VHF_HASH_LEN = 16;
|
|
LAN78XX_DP_SEL_VHF_VLAN_LEN = 128;
|
LAN78XX_DP_CMD_*
LAN78XX_DP_CMD = $028;
|
|
LAN78XX_DP_CMD_WRITE = $00000001;
|
|
LAN78XX_DP_CMD_READ = $00000000;
|
LAN78XX_DP_ADDR_*
LAN78XX_DP_ADDR = $02C;
|
|
LAN78XX_DP_ADDR_MASK = $00003FFF;
|
LAN78XX_DP_DATA_*
LAN78XX_DP_DATA = $030;
|
LAN78XX_E2P_CMD_*
LAN78XX_E2P_CMD = $040;
|
|
LAN78XX_E2P_CMD_EPC_BUSY = $80000000;
|
|
LAN78XX_E2P_CMD_EPC_CMD_MASK = $70000000;
|
|
LAN78XX_E2P_CMD_EPC_CMD_RELOAD = $70000000;
|
|
LAN78XX_E2P_CMD_EPC_CMD_ERAL = $60000000;
|
|
LAN78XX_E2P_CMD_EPC_CMD_ERASE = $50000000;
|
|
LAN78XX_E2P_CMD_EPC_CMD_WRAL = $40000000;
|
|
LAN78XX_E2P_CMD_EPC_CMD_WRITE = $30000000;
|
|
LAN78XX_E2P_CMD_EPC_CMD_EWEN = $20000000;
|
|
LAN78XX_E2P_CMD_EPC_CMD_EWDS = $10000000;
|
|
LAN78XX_E2P_CMD_EPC_CMD_READ = $00000000;
|
|
LAN78XX_E2P_CMD_EPC_TIMEOUT = $00000400;
|
|
LAN78XX_E2P_CMD_EPC_DL = $00000200;
|
|
LAN78XX_E2P_CMD_EPC_ADDR_MASK = $000001FF;
|
LAN78XX_E2P_DATA_*
LAN78XX_E2P_DATA = $044;
|
|
LAN78XX_E2P_DATA_EEPROM_DATA_MASK = $000000FF;
|
LAN78XX_BOS_ATTR_*
LAN78XX_BOS_ATTR = $050;
|
|
LAN78XX_BOS_ATTR_BLOCK_SIZE_MASK = $000000FF;
|
LAN78XX_SS_ATTR_*
LAN78XX_SS_ATTR = $054;
|
|
LAN78XX_SS_ATTR_POLL_INT_MASK = $00FF0000;
|
|
LAN78XX_SS_ATTR_DEV_DESC_SIZE_MASK = $0000FF00;
|
|
LAN78XX_SS_ATTR_CFG_BLK_SIZE_MASK = $000000FF;
|
LAN78XX_HS_ATTR_*
LAN78XX_HS_ATTR = $058;
|
|
LAN78XX_HS_ATTR_POLL_INT_MASK = $00FF0000;
|
|
LAN78XX_HS_ATTR_DEV_DESC_SIZE_MASK = $0000FF00;
|
|
LAN78XX_HS_ATTR_CFG_BLK_SIZE_MASK = $000000FF;
|
LAN78XX_FS_ATTR_*
LAN78XX_FS_ATTR = $05C;
|
|
LAN78XX_FS_ATTR_POLL_INT_MASK = $00FF0000;
|
|
LAN78XX_FS_ATTR_DEV_DESC_SIZE_MASK = $0000FF00;
|
|
LAN78XX_FS_ATTR_CFG_BLK_SIZE_MASK = $000000FF;
|
LAN78XX_STR_ATTR0_*
LAN78XX_STR_ATTR0 = $060;
|
|
LAN78XX_STR_ATTR0_CFGSTR_DESC_SIZE_MASK = $FF000000;
|
|
LAN78XX_STR_ATTR0_SERSTR_DESC_SIZE_MASK = $00FF0000;
|
|
LAN78XX_STR_ATTR0_PRODSTR_DESC_SIZE_MASK = $0000FF00;
|
|
LAN78XX_STR_ATTR0_MANUF_DESC_SIZE_MASK = $000000FF;
|
LAN78XX_STR_ATTR1_*
LAN78XX_STR_ATTR1 = $064;
|
|
LAN78XX_STR_ATTR1_INTSTR_DESC_SIZE_MASK = $000000FF;
|
LAN78XX_STR_FLAG_*
LAN78XX_STR_FLAG_ATTR = $068;
|
|
LAN78XX_STR_FLAG_ATTR_PME_FLAGS_MASK = $000000FF;
|
LAN78XX_USB_CFG0_*
LAN78XX_USB_CFG0 = $080;
|
|
LAN78XX_USB_CFG_LPM_RESPONSE = $80000000;
|
|
LAN78XX_USB_CFG_LPM_CAPABILITY = $40000000;
|
|
LAN78XX_USB_CFG_LPM_ENBL_SLPM = $20000000;
|
|
LAN78XX_USB_CFG_HIRD_THR_MASK = $1F000000;
|
|
LAN78XX_USB_CFG_HIRD_THR_960 = $1C000000;
|
|
LAN78XX_USB_CFG_HIRD_THR_885 = $1B000000;
|
|
LAN78XX_USB_CFG_HIRD_THR_810 = $1A000000;
|
|
LAN78XX_USB_CFG_HIRD_THR_735 = $19000000;
|
|
LAN78XX_USB_CFG_HIRD_THR_660 = $18000000;
|
|
LAN78XX_USB_CFG_HIRD_THR_585 = $17000000;
|
|
LAN78XX_USB_CFG_HIRD_THR_510 = $16000000;
|
|
LAN78XX_USB_CFG_HIRD_THR_435 = $15000000;
|
|
LAN78XX_USB_CFG_HIRD_THR_360 = $14000000;
|
|
LAN78XX_USB_CFG_HIRD_THR_285 = $13000000;
|
|
LAN78XX_USB_CFG_HIRD_THR_210 = $12000000;
|
|
LAN78XX_USB_CFG_HIRD_THR_135 = $11000000;
|
|
LAN78XX_USB_CFG_HIRD_THR_60 = $10000000;
|
|
LAN78XX_USB_CFG_MAX_BURST_BI_MASK = $00F00000;
|
|
LAN78XX_USB_CFG_MAX_BURST_BO_MASK = $000F0000;
|
|
LAN78XX_USB_CFG_MAX_DEV_SPEED_MASK = $0000E000;
|
|
LAN78XX_USB_CFG_MAX_DEV_SPEED_SS = $00008000;
|
|
LAN78XX_USB_CFG_MAX_DEV_SPEED_HS = $00000000;
|
|
LAN78XX_USB_CFG_MAX_DEV_SPEED_FS = $00002000;
|
|
LAN78XX_USB_CFG_PHY_BOOST_MASK = $00000180;
|
|
LAN78XX_USB_CFG_PHY_BOOST_PLUS_12 = $00000180;
|
|
LAN78XX_USB_CFG_PHY_BOOST_PLUS_8 = $00000100;
|
|
LAN78XX_USB_CFG_PHY_BOOST_PLUS_4 = $00000080;
|
|
LAN78XX_USB_CFG_PHY_BOOST_NORMAL = $00000000;
|
|
LAN78XX_USB_CFG_BIR = $00000040;
|
|
LAN78XX_USB_CFG_BCE = $00000020;
|
|
LAN78XX_USB_CFG_PORT_SWAP = $00000010;
|
|
LAN78XX_USB_CFG_LPM_EN = $00000008;
|
|
LAN78XX_USB_CFG_RMT_WKP = $00000004;
|
|
LAN78XX_USB_CFG_PWR_SEL = $00000002;
|
|
LAN78XX_USB_CFG_STALL_BO_DIS = $00000001;
|
LAN78XX_USB_CFG1_*
LAN78XX_USB_CFG1 = $084;
|
|
LAN78XX_USB_CFG1_U1_TIMEOUT_MASK = $FF000000;
|
|
LAN78XX_USB_CFG1_U2_TIMEOUT_MASK = $00FF0000;
|
|
LAN78XX_USB_CFG1_HS_TOUT_CAL_MASK = $0000E000;
|
|
LAN78XX_USB_CFG1_DEV_U2_INIT_EN = $00001000;
|
|
LAN78XX_USB_CFG1_DEV_U2_EN = $00000800;
|
|
LAN78XX_USB_CFG1_DEV_U1_INIT_EN = $00000400;
|
|
LAN78XX_USB_CFG1_DEV_U1_EN = $00000200;
|
|
LAN78XX_USB_CFG1_LTM_ENABLE = $00000100;
|
|
LAN78XX_USB_CFG1_FS_TOUT_CAL_MASK = $00000070;
|
|
LAN78XX_USB_CFG1_SCALE_DOWN_MASK = $00000003;
|
|
LAN78XX_USB_CFG1_SCALE_DOWN_MODE3 = $00000003;
|
|
LAN78XX_USB_CFG1_SCALE_DOWN_MODE2 = $00000002;
|
|
LAN78XX_USB_CFG1_SCALE_DOWN_MODE1 = $00000001;
|
|
LAN78XX_USB_CFG1_SCALE_DOWN_MODE0 = $00000000;
|
LAN78XX_USB_CFG2_*
LAN78XX_USB_CFG2 = $088;
|
|
LAN78XX_USB_CFG2_SS_DETACH_TIME_MASK = $FFFF0000;
|
|
LAN78XX_USB_CFG2_HS_DETACH_TIME_MASK = $0000FFFF;
|
LAN78XX_BURST_CAP_*
LAN78XX_BURST_CAP = $090;
|
|
LAN78XX_BURST_CAP_SIZE_MASK = $000000FF;
|
LAN78XX_BULK_IN_*
LAN78XX_BULK_IN_DLY = $094;
|
|
LAN78XX_BULK_IN_DLY_MASK = $0000FFFF;
|
LAN78XX_INT_EP*
LAN78XX_INT_EP_CTL = $098;
|
|
LAN78XX_INT_EP_INTEP_ON = $80000000;
|
|
LAN78XX_INT_STS_EEE_TX_LPI_STRT_EN = $04000000;
|
|
LAN78XX_INT_STS_EEE_TX_LPI_STOP_EN = $02000000;
|
|
LAN78XX_INT_STS_EEE_RX_LPI_EN = $01000000;
|
|
LAN78XX_INT_EP_RDFO_EN = $00400000;
|
|
LAN78XX_INT_EP_TXE_EN = $00200000;
|
|
LAN78XX_INT_EP_TX_DIS_EN = $00080000;
|
|
LAN78XX_INT_EP_RX_DIS_EN = $00040000;
|
|
LAN78XX_INT_EP_PHY_INT_EN = $00020000;
|
|
LAN78XX_INT_EP_DP_INT_EN = $00010000;
|
|
LAN78XX_INT_EP_MAC_ERR_EN = $00008000;
|
|
LAN78XX_INT_EP_TDFU_EN = $00004000;
|
|
LAN78XX_INT_EP_TDFO_EN = $00002000;
|
|
LAN78XX_INT_EP_UTX_FP_EN = $00001000;
|
|
LAN78XX_INT_EP_GPIO_EN_MASK = $00000FFF;
|
LAN78XX_PIPE_CTL_*
LAN78XX_PIPE_CTL = $09C;
|
|
LAN78XX_PIPE_CTL_TXSWING = $00000040;
|
|
LAN78XX_PIPE_CTL_TXMARGIN_MASK = $00000038;
|
|
LAN78XX_PIPE_CTL_TXDEEMPHASIS_MASK = $00000006;
|
|
LAN78XX_PIPE_CTL_ELASTICITYBUFFERMODE = $00000001;
|
LAN78XX_U1_LATENCY_*
LAN78XX_U1_LATENCY = $A0;
|
LAN78XX_U2_LATENCY_*
LAN78XX_U2_LATENCY = $A4;
|
LAN78XX_USB_STATUS_*
LAN78XX_USB_STATUS = $0A8;
|
|
LAN78XX_USB_STATUS_REMOTE_WK = $00100000;
|
|
LAN78XX_USB_STATUS_FUNC_REMOTE_WK = $00080000;
|
|
LAN78XX_USB_STATUS_LTM_ENABLE = $00040000;
|
|
LAN78XX_USB_STATUS_U2_ENABLE = $00020000;
|
|
LAN78XX_USB_STATUS_U1_ENABLE = $00010000;
|
|
LAN78XX_USB_STATUS_SET_SEL = $00000020;
|
|
LAN78XX_USB_STATUS_REMOTE_WK_STS = $00000010;
|
|
LAN78XX_USB_STATUS_FUNC_REMOTE_WK_STS = $00000008;
|
|
LAN78XX_USB_STATUS_LTM_ENABLE_STS = $00000004;
|
|
LAN78XX_USB_STATUS_U2_ENABLE_STS = $00000002;
|
|
LAN78XX_USB_STATUS_U1_ENABLE_STS = $00000001;
|
LAN78XX_USB_CFG3_*
LAN78XX_USB_CFG3 = $0AC;
|
|
LAN78XX_USB_CFG3_EN_U2_LTM = $40000000;
|
|
LAN78XX_USB_CFG3_BULK_OUT_NUMP_OVR = $20000000;
|
|
LAN78XX_USB_CFG3_DIS_FAST_U1_EXIT = $10000000;
|
|
LAN78XX_USB_CFG3_LPM_NYET_THR = $0F000000;
|
|
LAN78XX_USB_CFG3_RX_DET_2_POL_LFPS = $00800000;
|
|
LAN78XX_USB_CFG3_LFPS_FILT = $00400000;
|
|
LAN78XX_USB_CFG3_SKIP_RX_DET = $00200000;
|
|
LAN78XX_USB_CFG3_DELAY_P1P2P3 = $001C0000;
|
|
LAN78XX_USB_CFG3_DELAY_PHY_PWR_CHG = $00020000;
|
|
LAN78XX_USB_CFG3_U1U2_EXIT_FR = $00010000;
|
|
LAN78XX_USB_CFG3_REQ_P1P2P3 = $00008000;
|
|
LAN78XX_USB_CFG3_HST_PRT_CMPL = $00004000;
|
|
LAN78XX_USB_CFG3_DIS_SCRAMB = $00002000;
|
|
LAN78XX_USB_CFG3_PWR_DN_SCALE = $00001FFF;
|
LAN78XX_RFE_CTL_*
LAN78XX_RFE_CTL = $0B0;
|
|
LAN78XX_RFE_CTL_IGMP_COE = $00004000;
|
|
LAN78XX_RFE_CTL_ICMP_COE = $00002000;
|
|
LAN78XX_RFE_CTL_TCPUDP_COE = $00001000;
|
|
LAN78XX_RFE_CTL_IP_COE = $00000800;
|
|
LAN78XX_RFE_CTL_BCAST_EN = $00000400;
|
|
LAN78XX_RFE_CTL_MCAST_EN = $00000200;
|
|
LAN78XX_RFE_CTL_UCAST_EN = $00000100;
|
|
LAN78XX_RFE_CTL_VLAN_STRIP = $00000080;
|
|
LAN78XX_RFE_CTL_DISCARD_UNTAGGED = $00000040;
|
|
LAN78XX_RFE_CTL_VLAN_FILTER = $00000020;
|
|
LAN78XX_RFE_CTL_SA_FILTER = $00000010;
|
|
LAN78XX_RFE_CTL_MCAST_HASH = $00000008;
|
|
LAN78XX_RFE_CTL_DA_HASH = $00000004;
|
|
LAN78XX_RFE_CTL_DA_PERFECT = $00000002;
|
|
LAN78XX_RFE_CTL_RST = $00000001;
|
LAN78XX_VLAN_TYPE_*
LAN78XX_VLAN_TYPE = $0B4;
|
|
LAN78XX_VLAN_TYPE_MASK = $0000FFFF;
|
LAN78XX_FCT_RX_*
LAN78XX_FCT_RX_CTL = $0C0;
|
|
LAN78XX_FCT_RX_CTL_EN = $80000000;
|
|
LAN78XX_FCT_RX_CTL_RST = $40000000;
|
|
LAN78XX_FCT_RX_CTL_SBF = $02000000;
|
|
LAN78XX_FCT_RX_CTL_OVFL = $01000000;
|
|
LAN78XX_FCT_RX_CTL_DROP = $00800000;
|
|
LAN78XX_FCT_RX_CTL_NOT_EMPTY = $00400000;
|
|
LAN78XX_FCT_RX_CTL_EMPTY = $00200000;
|
|
LAN78XX_FCT_RX_CTL_DIS = $00100000;
|
|
LAN78XX_FCT_RX_CTL_USED_MASK = $0000FFFF;
|
LAN78XX_FCT_TX_*
LAN78XX_FCT_TX_CTL = $0C4;
|
|
LAN78XX_FCT_TX_CTL_EN = $80000000;
|
|
LAN78XX_FCT_TX_CTL_RST = $40000000;
|
|
LAN78XX_FCT_TX_CTL_NOT_EMPTY = $00400000;
|
|
LAN78XX_FCT_TX_CTL_EMPTY = $00200000;
|
|
LAN78XX_FCT_TX_CTL_DIS = $00100000;
|
|
LAN78XX_FCT_TX_CTL_USED_MASK = $0000FFFF;
|
LAN78XX_FCT_RX_FIFO_*
LAN78XX_FCT_RX_FIFO_END = $0C8;
|
|
LAN78XX_FCT_RX_FIFO_END_MASK = $0000007F;
|
LAN78XX_FCT_TX_FIFO_*
LAN78XX_FCT_TX_FIFO_END = $0CC;
|
|
LAN78XX_FCT_TX_FIFO_END_MASK = $0000003F;
|
LAN78XX_FCT_FLOW_*
LAN78XX_FCT_FLOW = $0D0;
|
|
LAN78XX_FCT_FLOW_OFF_MASK = $00007F00;
|
|
LAN78XX_FCT_FLOW_ON_MASK = $0000007F;
|
LAN78XX_RX_DP_STOR*
LAN78XX_RX_DP_STOR = $0D4;
|
|
LAN78XX_RX_DP_STORE_TOT_RXUSED_MASK = $FFFF0000;
|
|
LAN78XX_RX_DP_STORE_UTX_RXUSED_MASK = $0000FFFF;
|
LAN78XX_TX_DP_STOR_*
LAN78XX_TX_DP_STOR = $0D8;
|
|
LAN78XX_TX_DP_STORE_TOT_TXUSED_MASK = $FFFF0000;
|
|
LAN78XX_TX_DP_STORE_URX_TXUSED_MASK = $0000FFFF;
|
LAN78XX_LTM_BELT_IDLE0_*
LAN78XX_LTM_BELT_IDLE0 = $0E0;
|
|
LAN78XX_LTM_BELT_IDLE0_IDLE1000 = $0FFF0000;
|
|
LAN78XX_LTM_BELT_IDLE0_IDLE100 = $00000FFF;
|
LAN78XX_LTM_BELT_IDLE1_*
LAN78XX_LTM_BELT_IDLE1 = $0E4;
|
|
LAN78XX_LTM_BELT_IDLE1_IDLE10 = $00000FFF;
|
LAN78XX_LTM_BELT_ACT0_*
LAN78XX_LTM_BELT_ACT0 = $0E8;
|
|
LAN78XX_LTM_BELT_ACT0_ACT1000 = $0FFF0000;
|
|
LAN78XX_LTM_BELT_ACT0_ACT100 = $00000FFF;
|
LAN78XX_LTM_BELT_ACT1_*
LAN78XX_LTM_BELT_ACT1 = $0EC;
|
|
LAN78XX_LTM_BELT_ACT1_ACT10 = $00000FFF;
|
LAN78XX_LTM_INACTIVE0_*
LAN78XX_LTM_INACTIVE0 = $0F0;
|
|
LAN78XX_LTM_INACTIVE0_TIMER1000 = $FFFF0000;
|
|
LAN78XX_LTM_INACTIVE0_TIMER100 = $0000FFFF;
|
LAN78XX_LTM_INACTIVE1_*
LAN78XX_LTM_INACTIVE1 = $0F4;
|
|
LAN78XX_LTM_INACTIVE1_TIMER10 = $0000FFFF;
|
LAN78XX_MAC_CR_*
LAN78XX_MAC_CR = $100;
|
|
LAN78XX_MAC_CR_EEE_TX_CLK_STOP_EN = $00040000;
|
|
LAN78XX_MAC_CR_EEE_EN = $00020000;
|
|
LAN78XX_MAC_CR_EEE_TLAR_EN = $00010000;
|
|
LAN78XX_MAC_CR_ADP = $00002000;
|
|
LAN78XX_MAC_CR_AUTO_DUPLEX = $00001000;
|
|
LAN78XX_MAC_CR_AUTO_SPEED = $00000800;
|
|
LAN78XX_MAC_CR_LOOPBACK = $00000400;
|
|
LAN78XX_MAC_CR_BOLMT_MASK = $000000C0;
|
|
LAN78XX_MAC_CR_FULL_DUPLEX = $00000008;
|
|
LAN78XX_MAC_CR_SPEED_MASK = $00000006;
|
|
LAN78XX_MAC_CR_SPEED_1000 = $00000004;
|
|
LAN78XX_MAC_CR_SPEED_100 = $00000002;
|
|
LAN78XX_MAC_CR_SPEED_10 = $00000000;
|
|
LAN78XX_MAC_CR_RST = $00000001;
|
LAN78XX_MAC_RX_*
LAN78XX_MAC_RX = $104;
|
|
LAN78XX_MAC_RX_MAX_SIZE_SHIFT = 16;
|
|
LAN78XX_MAC_RX_MAX_SIZE_MASK = LongWord($3FFF0000);
|
|
LAN78XX_MAC_RX_FCS_STRIP = $00000010;
|
|
LAN78XX_MAC_RX_VLAN_FSE = $00000004;
|
|
LAN78XX_MAC_RX_RXD = $00000002;
|
|
LAN78XX_MAC_RX_RXEN = $00000001;
|
LAN78XX_MAC_TX_*
LAN78XX_MAC_TX = $108;
|
|
LAN78XX_MAC_TX_BAD_FCS = $00000004;
|
|
LAN78XX_MAC_TX_TXD = $00000002;
|
|
LAN78XX_MAC_TX_TXEN = $00000001;
|
LAN78XX_FLOW_*
LAN78XX_FLOW = $10C;
|
|
LAN78XX_FLOW_CR_FORCE_FC = $80000000;
|
|
LAN78XX_FLOW_CR_TX_FCEN = $40000000;
|
|
LAN78XX_FLOW_CR_RX_FCEN = $20000000;
|
|
LAN78XX_FLOW_CR_FPF = $10000000;
|
|
LAN78XX_FLOW_CR_FCPT_MASK = $0000FFFF;
|
LAN78XX_RAND_SEED_*
LAN78XX_RAND_SEED = $110;
|
|
LAN78XX_RAND_SEED_MASK = $0000FFFF;
|
LAN78XX_ERR_STS_*
LAN78XX_ERR_STS = $114;
|
|
LAN78XX_ERR_STS_FERR = $00000100;
|
|
LAN78XX_ERR_STS_LERR = $00000080;
|
|
LAN78XX_ERR_STS_RFERR = $00000040;
|
|
LAN78XX_ERR_STS_ECERR = $00000010;
|
|
LAN78XX_ERR_STS_ALERR = $00000008;
|
|
LAN78XX_ERR_STS_URERR = $00000004;
|
LAN78XX_RX_ADDRH_*
LAN78XX_RX_ADDRH = $118;
|
|
LAN78XX_RX_ADDRH_MASK = $0000FFFF;
|
LAN78XX_RX_ADDRL_*
LAN78XX_RX_ADDRL = $11C;
|
|
LAN78XX_RX_ADDRL_MASK = $FFFFFFFF;
|
LAN78XX_MII_ACC_*
LAN78XX_MII_ACC = $120;
|
|
LAN78XX_MII_ACC_PHY_ADDR_SHIFT = 11;
|
|
LAN78XX_MII_ACC_PHY_ADDR_MASK = $0000F800;
|
|
LAN78XX_MII_ACC_MIIRINDA_SHIFT = 6;
|
|
LAN78XX_MII_ACC_MIIRINDA_MASK = $000007C0;
|
|
LAN78XX_MII_ACC_MII_READ = $00000000;
|
|
LAN78XX_MII_ACC_MII_WRITE = $00000002;
|
|
LAN78XX_MII_ACC_MII_BUSY = $00000001;
|
LAN78XX_MII_DATA_*
LAN78XX_MII_DATA = $124;
|
|
LAN78XX_MII_DATA_MASK = $0000FFFF;
|
LAN78XX_MAC_RGMII_ID_*
LAN78XX_MAC_RGMII_ID = $128;
|
|
LAN78XX_MAC_RGMII_ID_TXC_DELAY_EN = $00000002;
|
|
LAN78XX_MAC_RGMII_ID_RXC_DELAY_EN = $00000001;
|
LAN78XX_EEE_TX_LPI_REQ_*
LAN78XX_EEE_TX_LPI_REQ_DLY = $130;
|
|
LAN78XX_EEE_TX_LPI_REQ_DLY_CNT_MASK = $FFFFFFFF;
|
LAN78XX_EEE_TW_TX_*
LAN78XX_EEE_TW_TX_SYS = $134;
|
|
LAN78XX_EEE_TW_TX_SYS_CNT1G_MASK = $FFFF0000;
|
|
LAN78XX_EEE_TW_TX_SYS_CNT100M_MASK = $0000FFFF;
|
LAN78XX_EEE_TX_LPI_REM_*
LAN78XX_EEE_TX_LPI_REM_DLY = $138;
|
|
LAN78XX_EEE_TX_LPI_REM_DLY_CNT = $00FFFFFF;
|
LAN78XX_WUCSR_*
LAN78XX_WUCSR = $140;
|
|
LAN78XX_WUCSR_TESTMODE = $80000000;
|
|
LAN78XX_WUCSR_RFE_WAKE_EN = $00004000;
|
|
LAN78XX_WUCSR_EEE_TX_WAKE = $00002000;
|
|
LAN78XX_WUCSR_EEE_TX_WAKE_EN = $00001000;
|
|
LAN78XX_WUCSR_EEE_RX_WAKE_EN = $00000400;
|
|
LAN78XX_WUCSR_RFE_WAKE_FR = $00000200;
|
|
LAN78XX_WUCSR_STORE_WAKE = $00000100;
|
|
LAN78XX_WUCSR_PFDA_FR = $00000080;
|
|
LAN78XX_WUCSR_WUFR = $00000040;
|
|
LAN78XX_WUCSR_MPR = $00000020;
|
|
LAN78XX_WUCSR_BCST_FR = $00000010;
|
|
LAN78XX_WUCSR_PFDA_EN = $00000008;
|
|
LAN78XX_WUCSR_WAKE_EN = $00000004;
|
|
LAN78XX_WUCSR_MPEN = $00000002;
|
|
LAN78XX_WUCSR_BCST_EN = $00000001;
|
LAN78XX_WK_SRC_*
LAN78XX_WK_SRC = $144;
|
|
LAN78XX_WK_SRC_GPIOX_INT_WK_SHIFT = 20;
|
|
LAN78XX_WK_SRC_GPIOX_INT_WK_MASK = $FFF00000;
|
|
LAN78XX_WK_SRC_IPV6_TCPSYN_RCD_WK = $00010000;
|
|
LAN78XX_WK_SRC_IPV4_TCPSYN_RCD_WK = $00008000;
|
|
LAN78XX_WK_SRC_EEE_TX_WK = $00004000;
|
|
LAN78XX_WK_SRC_EEE_RX_WK = $00002000;
|
|
LAN78XX_WK_SRC_GOOD_FR_WK = $00001000;
|
|
LAN78XX_WK_SRC_PFDA_FR_WK = $00000800;
|
|
LAN78XX_WK_SRC_MP_FR_WK = $00000400;
|
|
LAN78XX_WK_SRC_BCAST_FR_WK = $00000200;
|
|
LAN78XX_WK_SRC_WU_FR_WK = $00000100;
|
|
LAN78XX_WK_SRC_WUFF_MATCH_MASK = $0000001F;
|
LAN78XX_WUF_CFG0_*
LAN78XX_WUF_CFG0 = $150;
|
|
LAN78XX_NUM_OF_WUF_CFG = 32;
|
|
LAN78XX_WUF_CFG_BEGIN = LAN78XX_WUF_CFG0;
|
|
LAN78XX_WUF_CFG(index) = LAN78XX_WUF_CFG_BEGIN + (4 * (index)))
|
|
LAN78XX_WUF_CFGX_EN = $80000000;
|
|
LAN78XX_WUF_CFGX_TYPE_MASK = $03000000;
|
|
LAN78XX_WUF_CFGX_TYPE_MCAST = $02000000;
|
|
LAN78XX_WUF_CFGX_TYPE_ALL = $01000000;
|
|
LAN78XX_WUF_CFGX_TYPE_UCAST = $00000000;
|
|
LAN78XX_WUF_CFGX_OFFSET_SHIFT = 16;
|
|
LAN78XX_WUF_CFGX_OFFSET_MASK = $00FF0000;
|
|
LAN78XX_WUF_CFGX_CRC16_MASK = $0000FFFF;
|
LAN78XX_WUF_MASK_*
LAN78XX_WUF_MASK0_0 = $200;
|
|
LAN78XX_WUF_MASK0_1 = $204;
|
|
LAN78XX_WUF_MASK0_2 = $208;
|
|
LAN78XX_WUF_MASK0_3 = $20C;
|
|
LAN78XX_NUM_OF_WUF_MASK = 32;
|
|
LAN78XX_WUF_MASK0_BEGIN = LAN78XX_WUF_MASK0_0;
|
|
LAN78XX_WUF_MASK1_BEGIN = LAN78XX_WUF_MASK0_1;
|
|
LAN78XX_WUF_MASK2_BEGIN = LAN78XX_WUF_MASK0_2;
|
|
LAN78XX_WUF_MASK3_BEGIN = LAN78XX_WUF_MASK0_3;
|
|
LAN78XX_WUF_MASK0(index) = LAN78XX_WUF_MASK0_BEGIN + = $10 * (index)))
|
|
LAN78XX_WUF_MASK1(index) = LAN78XX_WUF_MASK1_BEGIN + = $10 * (index)))
|
|
LAN78XX_WUF_MASK2(index) = LAN78XX_WUF_MASK2_BEGIN + = $10 * (index)))
|
|
LAN78XX_WUF_MASK3(index) = LAN78XX_WUF_MASK3_BEGIN + = $10 * (index)))
|
LAN78XX_MAF_*
0x400 - 0x504 | |
LAN78XX_MAF_BASE = $400;
|
|
LAN78XX_MAF_HIX = $00;
|
|
LAN78XX_MAF_LOX = $04;
|
|
LAN78XX_NUM_OF_MAF = 33;
|
|
LAN78XX_MAF_LO_BEGIN = LAN78XX_MAF_BASE + LAN78XX_MAF_LOX;
|
|
LAN78XX_MAF_HI(index) = LAN78XX_MAF_BASE + (8 * (index)) + (LAN78XX_MAF_HIX))
|
|
LAN78XX_MAF_LO(index) = LAN78XX_MAF_BASE + (8 * (index)) + (LAN78XX_MAF_LOX))
|
|
LAN78XX_MAF_HI_VALID = $80000000;
|
|
LAN78XX_MAF_HI_TYPE_MASK = $40000000;
|
|
LAN78XX_MAF_HI_TYPE_SRC = $40000000;
|
|
LAN78XX_MAF_HI_TYPE_DST = $00000000;
|
|
LAN78XX_MAF_HI_ADDR_MASK = $0000FFFF;
|
|
LAN78XX_MAF_LO_ADDR_MASK = $FFFFFFFF;
|
LAN78XX_WUCSR2_*
LAN78XX_WUCSR2 = $600;
|
|
LAN78XX_WUCSR2_CSUM_DISABLE = $80000000;
|
|
LAN78XX_WUCSR2_NA_SA_SEL = $00000100;
|
|
LAN78XX_WUCSR2_NS_RCD = $00000080;
|
|
LAN78XX_WUCSR2_ARP_RCD = $00000040;
|
|
LAN78XX_WUCSR2_IPV6_TCPSYN_RCD = $00000020;
|
|
LAN78XX_WUCSR2_IPV4_TCPSYN_RCD = $00000010;
|
|
LAN78XX_WUCSR2_NS_OFFLOAD_EN = $00000008;
|
|
LAN78XX_WUCSR2_ARP_OFFLOAD_EN = $00000004;
|
|
LAN78XX_WUCSR2_IPV6_TCPSYN_WAKE_EN = $00000002;
|
|
LAN78XX_WUCSR2_IPV4_TCPSYN_WAKE_EN = $00000001;
|
LAN78XX_NS1_IPV6_ADDR_DEST_*
0x610h - 0x61C | |
0x650h - 0x65C | |
LAN78XX_NS1_IPV6_ADDR_DEST0 = $610;
|
|
LAN78XX_NS1_IPV6_ADDR_DEST1 = $614;
|
|
LAN78XX_NS1_IPV6_ADDR_DEST2 = $618;
|
|
LAN78XX_NS1_IPV6_ADDR_DEST3 = $61C;
|
LAN78XX_NS1_IPV6_ADDR_SRC_*
0x620 - 0x62C | |
0x660 - 0x66C | |
LAN78XX_NS1_IPV6_ADDR_SRC0 = $620;
|
|
LAN78XX_NS1_IPV6_ADDR_SRC1 = $624;
|
|
LAN78XX_NS1_IPV6_ADDR_SRC2 = $628;
|
|
LAN78XX_NS1_IPV6_ADDR_SRC3 = $62C;
|
LAN78XX_NS1_ICMPV6_ADDR_*
0x630 - 0x63C | |
0x670 - 0x67C | |
LAN78XX_NS1_ICMPV6_ADDR0_0 = $630;
|
|
LAN78XX_NS1_ICMPV6_ADDR0_1 = $634;
|
|
LAN78XX_NS1_ICMPV6_ADDR0_2 = $638;
|
|
LAN78XX_NS1_ICMPV6_ADDR0_3 = $63C;
|
LAN78XX_NS1_ICMPV6_ADDR1_*
0x640 - 0x64C | |
0x680 - 0x68C | |
LAN78XX_NS1_ICMPV6_ADDR1_0 = $640;
|
|
LAN78XX_NS1_ICMPV6_ADDR1_1 = $644;
|
|
LAN78XX_NS1_ICMPV6_ADDR1_2 = $648;
|
|
LAN78XX_NS1_ICMPV6_ADDR1_3 = $64C;
|
LAN78XX_NS2_IPV6_ADDR_DEST_*
LAN78XX_NS2_IPV6_ADDR_DEST0 = $650;
|
|
LAN78XX_NS2_IPV6_ADDR_DEST1 = $654;
|
|
LAN78XX_NS2_IPV6_ADDR_DEST2 = $658;
|
|
LAN78XX_NS2_IPV6_ADDR_DEST3 = $65C;
|
LAN78XX_NS2_IPV6_ADDR_SRC_*
LAN78XX_NS2_IPV6_ADDR_SRC0 = $660;
|
|
LAN78XX_NS2_IPV6_ADDR_SRC1 = $664;
|
|
LAN78XX_NS2_IPV6_ADDR_SRC2 = $668;
|
|
LAN78XX_NS2_IPV6_ADDR_SRC3 = $66C;
|
LAN78XX_NS2_ICMPV6_ADDR0_*
LAN78XX_NS2_ICMPV6_ADDR0_0 = $670;
|
|
LAN78XX_NS2_ICMPV6_ADDR0_1 = $674;
|
|
LAN78XX_NS2_ICMPV6_ADDR0_2 = $678;
|
|
LAN78XX_NS2_ICMPV6_ADDR0_3 = $67C;
|
LAN78XX_NS2_ICMPV6_ADDR1_*
LAN78XX_NS2_ICMPV6_ADDR1_0 = $680;
|
|
LAN78XX_NS2_ICMPV6_ADDR1_1 = $684;
|
|
LAN78XX_NS2_ICMPV6_ADDR1_2 = $688;
|
|
LAN78XX_NS2_ICMPV6_ADDR1_3 = $68C;
|
LAN78XX_SYN_IPV4_ADDR_SRC_*
LAN78XX_SYN_IPV4_ADDR_SRC = $690;
|
LAN78XX_SYN_IPV4_ADDR_DEST_*
LAN78XX_SYN_IPV4_ADDR_DEST = $694;
|
LAN78XX_SYN_IPV4_TCP_PORTS_*
LAN78XX_SYN_IPV4_TCP_PORTS = $698;
|
|
LAN78XX_SYN_IPV4_TCP_PORTS_IPV4_DEST_PORT_SHIFT = 16;
|
|
LAN78XX_SYN_IPV4_TCP_PORTS_IPV4_DEST_PORT_MASK = $FFFF0000;
|
|
LAN78XX_SYN_IPV4_TCP_PORTS_IPV4_SRC_PORT_MASK = $0000FFFF;
|
LAN78XX_SYN_IPV6_ADDR_SRC_*
LAN78XX_SYN_IPV6_ADDR_SRC0 = $69C;
|
|
LAN78XX_SYN_IPV6_ADDR_SRC1 = $6A0;
|
|
LAN78XX_SYN_IPV6_ADDR_SRC2 = $6A4;
|
|
LAN78XX_SYN_IPV6_ADDR_SRC3 = $6A8;
|
LAN78XX_SYN_IPV6_ADDR_DEST_*
LAN78XX_SYN_IPV6_ADDR_DEST0 = $6AC;
|
|
LAN78XX_SYN_IPV6_ADDR_DEST1 = $6B0;
|
|
LAN78XX_SYN_IPV6_ADDR_DEST2 = $6B4;
|
|
LAN78XX_SYN_IPV6_ADDR_DEST3 = $6B8;
|
LAN78XX_SYN_IPV6_TCP_PORTS_*
LAN78XX_SYN_IPV6_TCP_PORTS = $6BC;
|
|
LAN78XX_SYN_IPV6_TCP_PORTS_IPV6_DEST_PORT_SHIFT = 16;
|
|
LAN78XX_SYN_IPV6_TCP_PORTS_IPV6_DEST_PORT_MASK = $FFFF0000;
|
|
LAN78XX_SYN_IPV6_TCP_PORTS_IPV6_SRC_PORT_MASK = $0000FFFF;
|
LAN78XX_ARP_SPA_*
LAN78XX_ARP_SPA = $6C0;
|
LAN78XX_ARP_TPA_*
LAN78XX_ARP_TPA = $6C4;
|
LAN78XX_PHY_DEV_ID_*
LAN78XX_PHY_DEV_ID = $700;
|
|
LAN78XX_PHY_DEV_ID_REV_SHIFT = 28;
|
|
LAN78XX_PHY_DEV_ID_REV_MASK = $F0000000;
|
|
LAN78XX_PHY_DEV_ID_MODEL_SHIFT = 22;
|
|
LAN78XX_PHY_DEV_ID_MODEL_MASK = $0FC00000;
|
|
LAN78XX_PHY_DEV_ID_OUI_MASK = $003FFFFF;
|
LAN78XX_OTP_*
LAN78XX_OTP_BASE_ADDR = $00001000;
|
|
LAN78XX_OTP_ADDR_RANGE = $1FF;
|
|
LAN78XX_OTP_PWR_DN = LAN78XX_OTP_BASE_ADDR + 4 * $00;
|
|
LAN78XX_OTP_PWR_DN_PWRDN_N = $01;
|
|
LAN78XX_OTP_ADDR1 = LAN78XX_OTP_BASE_ADDR + 4 * $01;
|
|
LAN78XX_OTP_ADDR1_15_11 = $1F;
|
|
LAN78XX_OTP_ADDR2 = LAN78XX_OTP_BASE_ADDR + 4 * $02;
|
|
LAN78XX_OTP_ADDR2_10_3 = $FF;
|
|
LAN78XX_OTP_ADDR3 = LAN78XX_OTP_BASE_ADDR + 4 * $03;
|
|
LAN78XX_OTP_ADDR3_2_0 = $03;
|
|
LAN78XX_OTP_PRGM_DATA = LAN78XX_OTP_BASE_ADDR + 4 * $04;
|
|
LAN78XX_OTP_PRGM_MODE = LAN78XX_OTP_BASE_ADDR + 4 * $05;
|
|
LAN78XX_OTP_PRGM_MODE_BYTE = $01;
|
|
LAN78XX_OTP_RD_DATA = LAN78XX_OTP_BASE_ADDR + 4 * $06;
|
|
LAN78XX_OTP_FUNC_CMD = LAN78XX_OTP_BASE_ADDR + 4 * $08;
|
|
LAN78XX_OTP_FUNC_CMD_RESET = $04;
|
|
LAN78XX_OTP_FUNC_CMD_PROGRAM = $02;
|
|
LAN78XX_OTP_FUNC_CMD_READ = $01;
|
|
LAN78XX_OTP_TST_CMD = LAN78XX_OTP_BASE_ADDR + 4 * $09;
|
|
LAN78XX_OTP_TST_CMD_TEST_DEC_SEL = $10;
|
|
LAN78XX_OTP_TST_CMD_PRGVRFY = $08;
|
|
LAN78XX_OTP_TST_CMD_WRTEST = $04;
|
|
LAN78XX_OTP_TST_CMD_TESTDEC = $02;
|
|
LAN78XX_OTP_TST_CMD_BLANKCHECK = $01;
|
|
LAN78XX_OTP_CMD_GO = LAN78XX_OTP_BASE_ADDR + 4 * $0A;
|
|
LAN78XX_OTP_CMD_GO_GO = $01;
|
|
LAN78XX_OTP_PASS_FAIL = LAN78XX_OTP_BASE_ADDR + 4 * $0B;
|
|
LAN78XX_OTP_PASS_FAIL_PASS = $02;
|
|
LAN78XX_OTP_PASS_FAIL_FAIL = $01;
|
|
LAN78XX_OTP_STATUS = LAN78XX_OTP_BASE_ADDR + 4 * $0C;
|
|
LAN78XX_OTP_STATUS_OTP_LOCK = $10;
|
|
LAN78XX_OTP_STATUS_WEB = $08;
|
|
LAN78XX_OTP_STATUS_PGMEN = $04;
|
|
LAN78XX_OTP_STATUS_CPUMPEN = $02;
|
|
LAN78XX_OTP_STATUS_BUSY = $01;
|
|
LAN78XX_OTP_MAX_PRG = LAN78XX_OTP_BASE_ADDR + 4 * $0D;
|
|
LAN78XX_OTP_MAX_PRG_MAX_PROG = $1F;
|
|
LAN78XX_OTP_INTR_STATUS = LAN78XX_OTP_BASE_ADDR + 4 * $10;
|
|
LAN78XX_OTP_INTR_STATUS_READY = $01;
|
|
LAN78XX_OTP_INTR_MASK = LAN78XX_OTP_BASE_ADDR + 4 * $11;
|
|
LAN78XX_OTP_INTR_MASK_READY = $01;
|
|
LAN78XX_OTP_RSTB_PW1 = LAN78XX_OTP_BASE_ADDR + 4 * $14;
|
|
LAN78XX_OTP_RSTB_PW2 = LAN78XX_OTP_BASE_ADDR + 4 * $15;
|
|
LAN78XX_OTP_PGM_PW1 = LAN78XX_OTP_BASE_ADDR + 4 * $18;
|
|
LAN78XX_OTP_PGM_PW2 = LAN78XX_OTP_BASE_ADDR + 4 * $19;
|
|
LAN78XX_OTP_READ_PW1 = LAN78XX_OTP_BASE_ADDR + 4 * $1C;
|
|
LAN78XX_OTP_READ_PW2 = LAN78XX_OTP_BASE_ADDR + 4 * $1D;
|
|
LAN78XX_OTP_TCRST = LAN78XX_OTP_BASE_ADDR + 4 * $20;
|
|
LAN78XX_OTP_RSRD = LAN78XX_OTP_BASE_ADDR + 4 * $21;
|
|
LAN78XX_OTP_TREADEN_VAL = LAN78XX_OTP_BASE_ADDR + 4 * $22;
|
|
LAN78XX_OTP_TDLES_VAL = LAN78XX_OTP_BASE_ADDR + 4 * $23;
|
|
LAN78XX_OTP_TWWL_VAL = LAN78XX_OTP_BASE_ADDR + 4 * $24;
|
|
LAN78XX_OTP_TDLEH_VAL = LAN78XX_OTP_BASE_ADDR + 4 * $25;
|
|
LAN78XX_OTP_TWPED_VAL = LAN78XX_OTP_BASE_ADDR + 4 * $26;
|
|
LAN78XX_OTP_TPES_VAL = LAN78XX_OTP_BASE_ADDR + 4 * $27;
|
|
LAN78XX_OTP_TCPS_VAL = LAN78XX_OTP_BASE_ADDR + 4 * $28;
|
|
LAN78XX_OTP_TCPH_VAL = LAN78XX_OTP_BASE_ADDR + 4 * $29;
|
|
LAN78XX_OTP_TPGMVFY_VAL = LAN78XX_OTP_BASE_ADDR + 4 * $2A;
|
|
LAN78XX_OTP_TPEH_VAL = LAN78XX_OTP_BASE_ADDR + 4 * $2B;
|
|
LAN78XX_OTP_TPGRST_VAL = LAN78XX_OTP_BASE_ADDR + 4 * $2C;
|
|
LAN78XX_OTP_TCLES_VAL = LAN78XX_OTP_BASE_ADDR + 4 * $2D;
|
|
LAN78XX_OTP_TCLEH_VAL = LAN78XX_OTP_BASE_ADDR + 4 * $2E;
|
|
LAN78XX_OTP_TRDES_VAL = LAN78XX_OTP_BASE_ADDR + 4 * $2F;
|
|
LAN78XX_OTP_TBCACC_VAL = LAN78XX_OTP_BASE_ADDR + 4 * $30;
|
|
LAN78XX_OTP_TAAC_VAL = LAN78XX_OTP_BASE_ADDR + 4 * $31;
|
|
LAN78XX_OTP_TACCT_VAL = LAN78XX_OTP_BASE_ADDR + 4 * $32;
|
|
LAN78XX_OTP_TRDEP_VAL = LAN78XX_OTP_BASE_ADDR + 4 * $38;
|
|
LAN78XX_OTP_TPGSV_VAL = LAN78XX_OTP_BASE_ADDR + 4 * $39;
|
|
LAN78XX_OTP_TPVSR_VAL = LAN78XX_OTP_BASE_ADDR + 4 * $3A;
|
|
LAN78XX_OTP_TPVHR_VAL = LAN78XX_OTP_BASE_ADDR + 4 * $3B;
|
|
LAN78XX_OTP_TPVSA_VAL = LAN78XX_OTP_BASE_ADDR + 4 * $3C;
|
LAN88XX_INT_MASK_*
LAN88XX_INT_MASK = $19;
|
|
LAN88XX_INT_MASK_MDINTPIN_EN = $8000;
|
|
LAN88XX_INT_MASK_SPEED_CHANGE = $4000;
|
|
LAN88XX_INT_MASK_LINK_CHANGE = $2000;
|
|
LAN88XX_INT_MASK_FDX_CHANGE = $1000;
|
|
LAN88XX_INT_MASK_AUTONEG_ERR = $0800;
|
|
LAN88XX_INT_MASK_AUTONEG_DONE = $0400;
|
|
LAN88XX_INT_MASK_POE_DETECT = $0200;
|
|
LAN88XX_INT_MASK_SYMBOL_ERR = $0100;
|
|
LAN88XX_INT_MASK_FAST_LINK_FAIL = $0080;
|
|
LAN88XX_INT_MASK_WOL_EVENT = $0040;
|
|
LAN88XX_INT_MASK_EXTENDED_INT = $0020;
|
|
LAN88XX_INT_MASK_RESERVED = $0010;
|
|
LAN88XX_INT_MASK_FALSE_CARRIER = $0008;
|
|
LAN88XX_INT_MASK_LINK_SPEED_DS = $0004;
|
|
LAN88XX_INT_MASK_MASTER_SLAVE_DONE = $0002;
|
|
LAN88XX_INT_MASK_RX__ER = $0001;
|
LAN88XX_INT_STS_*
LAN88XX_INT_STS = $1A;
|
|
LAN88XX_INT_STS_INT_ACTIVE = $8000;
|
|
LAN88XX_INT_STS_SPEED_CHANGE = $4000;
|
|
LAN88XX_INT_STS_LINK_CHANGE = $2000;
|
|
LAN88XX_INT_STS_FDX_CHANGE = $1000;
|
|
LAN88XX_INT_STS_AUTONEG_ERR = $0800;
|
|
LAN88XX_INT_STS_AUTONEG_DONE = $0400;
|
|
LAN88XX_INT_STS_POE_DETECT = $0200;
|
|
LAN88XX_INT_STS_SYMBOL_ERR = $0100;
|
|
LAN88XX_INT_STS_FAST_LINK_FAIL = $0080;
|
|
LAN88XX_INT_STS_WOL_EVENT = $0040;
|
|
LAN88XX_INT_STS_EXTENDED_INT = $0020;
|
|
LAN88XX_INT_STS_RESERVED = $0010;
|
|
LAN88XX_INT_STS_FALSE_CARRIER = $0008;
|
|
LAN88XX_INT_STS_LINK_SPEED_DS = $0004;
|
|
LAN88XX_INT_STS_MASTER_SLAVE_DONE = $0002;
|
|
LAN88XX_INT_STS_RX_ER = $0001;
|
LAN88XX_EXT_PAGE_*
LAN88XX_EXT_PAGE_ACCESS = $1F;
|
|
LAN88XX_EXT_PAGE_SPACE_0 = $0000;
|
|
LAN88XX_EXT_PAGE_SPACE_1 = $0001;
|
|
LAN88XX_EXT_PAGE_SPACE_2 = $0002;
|
LAN88XX_EXT_MODE_CTRL_*
LAN88XX_EXT_MODE_CTRL = $13;
|
|
LAN88XX_EXT_MODE_CTRL_MDIX_MASK = $000C;
|
|
LAN88XX_EXT_MODE_CTRL_AUTO_MDIX = $0000;
|
|
LAN88XX_EXT_MODE_CTRL_MDI = $0008;
|
|
LAN88XX_EXT_MODE_CTRL_MDI_X = $000C;
|
LAN88XX_MMD3_*
LAN88XX_MMD3_CHIP_ID = 32877;
|
|
LAN88XX_MMD3_CHIP_REV = 32878;
|
Type definitions
LAN78XX network
PLAN78XXNetwork = ^TLAN78XXNetwork;
TLAN78XXNetwork = record
Network Properties | |
Network:TNetworkDevice;
|
|
Driver Properties | |
ChipID:LongWord;
|
|
ChipRevision:LongWord;
|
|
PHYLock:TMutexHandle;
|
|
ReceiveRequestSize:LongWord;
|
Size of each USB receive request buffer |
TransmitRequestSize:LongWord;
|
Size of each USB transmit request buffer |
ReceiveEntryCount:LongWord;
|
Number of entries in the receive queue |
TransmitEntryCount:LongWord;
|
Number of entries in the transmit queue |
ReceivePacketCount:LongWord;
|
Maximum number of packets per receive entry |
TransmitPacketCount:LongWord;
|
Maximum number of packets per transmit entry |
USB Properties | |
ReceiveRequest:PUSBRequest;
|
USB request for packet receive data |
TransmitRequest:PUSBRequest;
|
USB request for packet transmit data |
InterruptRequest:PUSBRequest;
|
USB request for interrupt data |
ReceiveEndpoint:PUSBEndpointDescriptor;
|
Bulk IN Endpoint |
TransmitEndpoint:PUSBEndpointDescriptor;
|
Bulk OUT Endpoint |
InterruptEndpoint:PUSBEndpointDescriptor;
|
Interrupt IN Endpoint |
PendingCount:LongWord;
|
Number of USB requests pending for this network |
WaiterThread:TThreadId;
|
Thread waiting for pending requests to complete (for network close) |
LAN78XX statistics
PLAN78XXStatistics = ^TLAN78XXStatistics;
TLAN78XXStatistics = record
RXFCSErrors:LongWord;
|
|
RXAlignmentErrors:LongWord;
|
|
RXFragmentErrors:LongWord;
|
|
RXJabberErrors:LongWord;
|
|
RXUndersizeFrameErrors:LongWord;
|
|
RXOversizeFrameErrors:LongWord;
|
|
RXDroppedFrames:LongWord;
|
|
RXUnicastByteCount:LongWord;
|
|
RXBroadcastByteCount:LongWord;
|
|
RXMulticastByteCount:LongWord;
|
|
RXUnicastFrames:LongWord;
|
|
RXBroadcastFrames:LongWord;
|
|
RXMulticastFrames:LongWord;
|
|
RXPauseFrames:LongWord;
|
|
RX64ByteFrames:LongWord;
|
|
RX65_127ByteFrames:LongWord;
|
|
RX128_255ByteFrames:LongWord;
|
|
RX256_511BytesFrames:LongWord;
|
|
RX512_1023ByteFrames:LongWord;
|
|
RX1024_1518ByteFrames:LongWord;
|
|
RXGreater_1518ByteFrames:LongWord;
|
|
EEERXLPITransitions:LongWord;
|
|
EEERXLPITime:LongWord;
|
|
TXFCSErrors:LongWord;
|
|
TXExcessDeferralErrors:LongWord;
|
|
TXCarrierErrors:LongWord;
|
|
TXBadByteCount:LongWord;
|
|
TXSingleCollisions:LongWord;
|
|
TXMultipleCollisions:LongWord;
|
|
TXExcessive_collision:LongWord;
|
|
TXLateCollisions:LongWord;
|
|
TXUnicastByteCount:LongWord;
|
|
TXBroadcastByteCount:LongWord;
|
|
TXMulticastByteCount:LongWord;
|
|
TXUnicastFrames:LongWord;
|
|
TXBroadcastFrames:LongWord;
|
|
TXMulticastFrames:LongWord;
|
|
TXPauseFrames:LongWord;
|
|
TX64ByteFrames:LongWord;
|
|
TX65_127ByteFrames:LongWord;
|
|
TX128_255ByteFrames:LongWord;
|
|
TX256_511BytesFrames:LongWord;
|
|
TX512_1023ByteFrames:LongWord;
|
|
TX1024_1518ByteFrames:LongWord;
|
|
TXGreater_1518ByteFrames:LongWord;
|
|
EEETXLPITransitions:LongWord;
|
|
EEETXLPITime:LongWord;
|
Public variables
None defined
Function declarations
Initialization functions
procedure LAN78XXInit;
Note | Called only during system startup |
---|
LAN78XX network functions
function LAN78XXNetworkOpen(Network:PNetworkDevice):LongWord;
Note | Not intended to be called directly by applications, use NetworkDeviceOpen instead. |
---|
function LAN78XXNetworkClose(Network:PNetworkDevice):LongWord;
Note | Not intended to be called directly by applications, use NetworkDeviceClose instead. |
---|
function LAN78XXNetworkControl(Network:PNetworkDevice; Request:Integer; Argument1:PtrUInt; var Argument2:PtrUInt):LongWord;
Note | Not intended to be called directly by applications, use NetworkDeviceControl instead. |
---|
function LAN78XXBufferAllocate(Network:PNetworkDevice; var Entry:PNetworkEntry):LongWord;
Note | Not intended to be called directly by applications, use NetworkBufferAllocate instead. |
---|
function LAN78XXBufferRelease(Network:PNetworkDevice; Entry:PNetworkEntry):LongWord;
Note | Not intended to be called directly by applications, use NetworkBufferRelease instead. |
---|
function LAN78XXBufferReceive(Network:PNetworkDevice; var Entry:PNetworkEntry):LongWord;
Note | Not intended to be called directly by applications, use NetworkBufferReceive instead. |
---|
function LAN78XXBufferTransmit(Network:PNetworkDevice; Entry:PNetworkEntry):LongWord;
Note | Not intended to be called directly by applications, use NetworkBufferTransmit instead. |
---|
procedure LAN78XXTransmitStart(Network:PLAN78XXNetwork);
Note | Not intended to be called directly by applications
Caller must hold the network lock |
---|
LAN78XX USB functions
function LAN78XXDriverBind(Device:PUSBDevice; Interrface:PUSBInterface):LongWord;
Device | The USB device to attempt to bind to |
---|---|
Interrface | The USB interface to attempt to bind to (or nil for whole device) |
Return | USB_STATUS_SUCCESS if completed, USB_STATUS_DEVICE_UNSUPPORTED if unsupported or another error code on failure. |
function LAN78XXDriverUnbind(Device:PUSBDevice; Interrface:PUSBInterface):LongWord;
Device | The USB device to unbind from |
---|---|
Interrface | The USB interface to unbind from (or nil for whole device) |
Return | USB_STATUS_SUCCESS if completed or another error code on failure |
procedure LAN78XXReceiveWorker(Request:PUSBRequest);
Request | The USB request which has completed |
---|
procedure LAN78XXReceiveComplete(Request:PUSBRequest);
Request | The USB request which has completed |
---|---|
Note | Request is passed to worker thread for processing to prevent blocking the USB completion |
procedure LAN78XXTransmitWorker(Request:PUSBRequest);
Request | The USB request which has completed |
---|
procedure LAN78XXTransmitComplete(Request:PUSBRequest);
Request | The USB request which has completed |
---|---|
Note | Request is passed to worker thread for processing to prevent blocking the USB completion |
procedure LAN78XXInterruptWorker(Request:PUSBRequest);
Request | The USB request which has completed |
---|
procedure LAN78XXInterruptComplete(Request:PUSBRequest);
Request | The USB request which has completed |
---|---|
Note | Request is passed to worker thread for processing to prevent blocking the USB completion |
LAN78XX helper functions
function LAN78XXCheckDevice(Device:PUSBDevice):LongWord;
Device | USB device to check |
---|---|
Return | USB_STATUS_SUCCESS if completed or another error code on failure |
function LAN78XXReadRegister(Device:PUSBDevice; Index:LongWord; var Data:LongWord):LongWord;
Device | USB device to read from |
---|---|
Index | Index of the register to read |
Data | Value to return the register contents |
Return | USB_STATUS_SUCCESS if completed or another error code on failure |
function LAN78XXWriteRegister(Device:PUSBDevice; Index,Data:LongWord):LongWord;
Device | USB device to write to |
---|---|
Index | Index of the register to write |
Data | Value to write to the register |
Return | USB_STATUS_SUCCESS if completed or another error code on failure |
function LAN78XXModifyRegister(Device:PUSBDevice; Index,Mask,Value:LongWord):LongWord;
Device | USB device to modify |
---|---|
Index | Index of the register to modify |
Mask | Mask that contains 1 for the bits where the old value in the register will be kept rather than cleared (unless those bits also appear in Value, in which case they will still be set). |
Value | Mask of bits to set in the register |
Return | USB_STATUS_SUCCESS if completed or another error code on failure |
function LAN78XXSetRegisterBits(Device:PUSBDevice; Index,Value:LongWord):LongWord;
Device | USB device to write to |
---|---|
Index | Index of the register to modify |
Value | Bits to set in the register. At positions where there is a 0, the old value in the register will be written. |
Return | USB_STATUS_SUCCESS if completed or another error code on failure |
function LAN78XXClearRegisterBits(Device:PUSBDevice; Index,Value:LongWord):LongWord;
Device | USB device to write to |
---|---|
Index | Index of the register to modify |
Value | Bits to clear in the register. At positions where there is a 0, the old value in the register will be written. |
Return | USB_STATUS_SUCCESS if completed or another error code on failure |
function LAN78XXPHYRead(Device:PUSBDevice; Index:LongWord; var Value:Word):LongWord;
Device | USB device to read from |
---|---|
Index | Index of the register to read |
Value | Value to return the register contents |
Return | USB_STATUS_SUCCESS if completed or another error code on failure |
function LAN78XXPHYWrite(Device:PUSBDevice; Index:LongWord; Value:Word):LongWord;
Device | USB device to write to |
---|---|
Index | Index of the register to write |
Value | Value to write to the register |
Return | USB_STATUS_SUCCESS if completed or another error code on failure |
function LAN78XXPHYInitialize(Device:PUSBDevice):LongWord;
Device | USB device to initialize |
---|---|
Return | USB_STATUS_SUCCESS if completed or another error code on failure |
function LAN78XXPHYWaitNotBusy(Device:PUSBDevice):LongWord;
Device | USB device to wait for |
---|---|
Return | USB_STATUS_SUCCESS if completed or another error code on failure |
Note | Caller must hold the PHY Lock |
function LAN78XXReadEEPROM(Device:PUSBDevice; Offset,Length:LongWord; Data:PByte):LongWord;
Device | USB device to read from |
---|---|
Offset | The byte offset to start reading |
Length | The number of bytes to read |
Data | Pointer to a buffer to receive the data |
Return | USB_STATUS_SUCCESS if completed or another error code on failure |
function LAN78XXReadRawEEPROM(Device:PUSBDevice; Offset,Length:LongWord; Data:PByte):LongWord;
Device | USB device to read from |
---|---|
Offset | The byte offset to start reading |
Length | The number of bytes to read |
Data | Pointer to a buffer to receive the data |
Return | USB_STATUS_SUCCESS if completed or another error code on failure |
function LAN78XXReadOTP(Device:PUSBDevice; Offset,Length:LongWord; Data:PByte):LongWord;
Device | USB device to read from |
---|---|
Offset | The byte offset to start reading |
Length | The number of bytes to read |
Data | Pointer to a buffer to receive the data |
Return | USB_STATUS_SUCCESS if completed or another error code on failure |
function LAN78XXReadRawOTP(Device:PUSBDevice; Offset,Length:LongWord; Data:PByte):LongWord;
Device | USB device to read from |
---|---|
Offset | The byte offset to start reading |
Length | The number of bytes to read |
Data | Pointer to a buffer to receive the data |
Return | USB_STATUS_SUCCESS if completed or another error code on failure |
function LAN78XXGetStatistics(Device:PUSBDevice; var Statistics:TLAN78XXStatistics):LongWord;
Device | USB device to read from |
---|---|
Statistics | The returned statistics from the device |
Return | USB_STATUS_SUCCESS if completed or another error code on failure |
function LAN78XXGetMacAddress(Device:PUSBDevice; Address:PHardwareAddress):LongWord;
Device | USB device read from |
---|---|
Address | Value to read the MAC address into |
Return | USB_STATUS_SUCCESS if completed or another error code on failure |
function LAN78XXSetMacAddress(Device:PUSBDevice; Address:PHardwareAddress):LongWord;
Device | USB device to write to |
---|---|
Address | MAC address value to set |
Return | USB_STATUS_SUCCESS if completed or another error code on failure |
Return to Unit Reference