/* ======================================================================== Routine Description: Arguments: Return Value: IRQL = Note: ======================================================================== */ NTSTATUS RTUSBWriteEEPROM( IN PRTMP_ADAPTER pAd, IN USHORT Offset, IN PUCHAR pData, IN USHORT length) { NTSTATUS Status = STATUS_SUCCESS; #ifdef RT30xx if(pAd->bUseEfuse) { Status = eFuseWrite(pAd, Offset, pData, length); } else #endif // RT30xx // { Status = RTUSB_VendorRequest( pAd, USBD_TRANSFER_DIRECTION_OUT, DEVICE_VENDOR_REQUEST_OUT, 0x8, 0, Offset, pData, length); } return Status; }
/* ======================================================================== Routine Description: Arguments: Return Value: IRQL = Note: ======================================================================== */ NTSTATUS RTUSBReadEEPROM( IN PRTMP_ADAPTER pAd, IN USHORT Offset, OUT PUCHAR pData, IN USHORT length) { NTSTATUS Status = STATUS_SUCCESS; #ifdef RT30xx if(pAd->bUseEfuse) { Status =eFuseRead(pAd, Offset, pData, length); } else #endif // RT30xx // { Status = RTUSB_VendorRequest( pAd, (USBD_TRANSFER_DIRECTION_IN | USBD_SHORT_TRANSFER_OK), DEVICE_VENDOR_REQUEST_IN, 0x9, 0, Offset, pData, length); } return Status; }
NTSTATUS RTUSBReadEEPROM(RTMP_ADAPTER *pAd, USHORT adr, UCHAR *buf, USHORT len) { return RTUSB_VendorRequest(pAd, (USBD_TRANSFER_DIRECTION_IN | USBD_SHORT_TRANSFER_OK), DEVICE_VENDOR_REQUEST_IN, 0x9, 0, adr, buf, len); }
int usb2_disconnect_cmd(RTMP_ADAPTER *ad, UINT8 Discon_mode, UINT8 GPIO_notify_mode, UINT8 GPIO_Notify_Pin) { NTSTATUS ret; UINT8 req = 0; UINT16 index = 0; req = 0x91; index = (GPIO_Notify_Pin << 0x05) | (GPIO_notify_mode << 0x03) | Discon_mode; DBGPRINT(RT_DEBUG_ERROR, ("usb2 disconnect command\n")); ret = RTUSB_VendorRequest(ad, USBD_TRANSFER_DIRECTION_OUT, DEVICE_VENDOR_REQUEST_OUT, req, 0x01, index, 0, 0); if (ret) { DBGPRINT(RT_DEBUG_ERROR, ("usb2 disconnect command fail\n")); } return ret; }
int write_reg(RTMP_ADAPTER *ad, UINT32 base, UINT16 offset, UINT32 val) { NTSTATUS ret; UINT8 req; UINT32 io_value; if (base == 0x40) req = 0x46; io_value = cpu2le32(val); ret = RTUSB_VendorRequest(ad, USBD_TRANSFER_DIRECTION_OUT, DEVICE_VENDOR_REQUEST_OUT, req, 0, offset, &io_value, 4); if (ret) { DBGPRINT(RT_DEBUG_ERROR, ("write reg fail\n")); } return ret; }
int read_reg(RTMP_ADAPTER *ad, UINT32 base, UINT16 offset, UINT32 *value) { NTSTATUS ret; UINT8 req = 0; UINT32 io_value; if (base == 0x40) req = 0x47; else if (base == 0x41) req = 0x7; else DBGPRINT(RT_DEBUG_ERROR, ("[%s] Unknown base %x\n", __FUNCTION__, base)); ret = RTUSB_VendorRequest(ad, (USBD_TRANSFER_DIRECTION_IN | USBD_SHORT_TRANSFER_OK), DEVICE_VENDOR_REQUEST_IN, req, 0, offset, &io_value, 4); *value = le2cpu32(io_value); if (ret) *value = 0xffffffff; return ret; }
/* ======================================================================== Routine Description: Write various length data to RT2573 Arguments: Return Value: IRQL = Note: ======================================================================== */ NTSTATUS RTUSBMultiWrite_OneByte(RTMP_ADAPTER *pAd, USHORT Offset, UCHAR *pData) { /* TODO: In 2870, use this funciton carefully cause it's not stable.*/ return RTUSB_VendorRequest(pAd, USBD_TRANSFER_DIRECTION_OUT, DEVICE_VENDOR_REQUEST_OUT, 0x6, 0, Offset, pData, 1); }
/* ======================================================================== Routine Description: Read 32-bit MAC register Arguments: Return Value: IRQL = Note: ======================================================================== */ NTSTATUS RTUSBReadMACRegister( IN PRTMP_ADAPTER pAd, IN USHORT Offset, OUT PUINT32 pValue) { NTSTATUS Status; UINT32 localVal; Status = RTUSB_VendorRequest( pAd, (USBD_TRANSFER_DIRECTION_IN | USBD_SHORT_TRANSFER_OK), DEVICE_VENDOR_REQUEST_IN, 0x7, 0, Offset, &localVal, 4); *pValue = le2cpu32(localVal); if (Status < 0) *pValue = 0xffffffff; return Status; }
static int rt73_suspend(struct usb_interface *intf, pm_message_t state) { PRTMP_ADAPTER pAd = (PRTMP_ADAPTER)NULL; DBGPRINT(RT_DEBUG_TRACE,"---> rt73_suspend()\n"); pAd = usb_get_intfdata(intf); // need to send it first before USB go susped. // without it system unable to reume back. RTUSB_VendorRequest(pAd, 0, DEVICE_VENDOR_REQUEST_OUT, 0x0C, 0x0, 0x0, NULL, 0); RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS); MlmeRadioOff(pAd); DBGPRINT(RT_DEBUG_TRACE,"<--- rt73_suspend()\n"); return 0; }
NTSTATUS RTUSBSingleWrite( IN RTMP_ADAPTER *pAd, IN USHORT Offset, IN USHORT Value, IN BOOLEAN WriteHigh) { return RTUSB_VendorRequest(pAd, USBD_TRANSFER_DIRECTION_OUT, DEVICE_VENDOR_REQUEST_OUT, (WriteHigh == TRUE) ? 0x10 : 0x2, Value, Offset, NULL, 0); }
/* ======================================================================== Routine Description: Get current firmware operation mode (Return Value) Arguments: Return Value: 0 or 1 = Downloaded by host driver others = Driver doesn't download firmware IRQL = Note: ======================================================================== */ NTSTATUS RTUSBFirmwareOpmode(RTMP_ADAPTER *pAd, UINT32 *pValue) { NTSTATUS Status; Status = RTUSB_VendorRequest( pAd, (USBD_TRANSFER_DIRECTION_IN | USBD_SHORT_TRANSFER_OK), DEVICE_VENDOR_REQUEST_IN, 0x1, 0x11, 0, pValue, 4); return Status; }
static NTSTATUS RTUSBFirmwareRun(RTMP_ADAPTER *pAd) { NTSTATUS Status; Status = RTUSB_VendorRequest( pAd, USBD_TRANSFER_DIRECTION_OUT, DEVICE_VENDOR_REQUEST_OUT, 0x01, 0x8, 0, NULL, 0); return Status; }
/* ======================================================================== Routine Description: Arguments: Return Value: IRQL = Note: ======================================================================== */ NTSTATUS RTUSBWakeUp( IN PRTMP_ADAPTER pAd) { NTSTATUS Status; Status = RTUSB_VendorRequest( pAd, USBD_TRANSFER_DIRECTION_OUT, DEVICE_VENDOR_REQUEST_OUT, 0x01, 0x09, 0, NULL, 0); return Status; }
NTSTATUS RTUSBVenderReset(RTMP_ADAPTER *pAd) { NTSTATUS Status; DBGPRINT_RAW(RT_DEBUG_ERROR, ("-->RTUSBVenderReset\n")); Status = RTUSB_VendorRequest( pAd, USBD_TRANSFER_DIRECTION_OUT, DEVICE_VENDOR_REQUEST_OUT, 0x01, 0x1, 0, NULL, 0); DBGPRINT_RAW(RT_DEBUG_ERROR, ("<--RTUSBVenderReset\n")); return Status; }
/* ======================================================================== Routine Description: Write various length data to RT USB Wifi device, the maxima length should not large than 65535 bytes. Arguments: Return Value: IRQL = Note: Use this funciton carefully cause it may not stable in some special USB host controllers. ======================================================================== */ NTSTATUS RTUSBMultiWrite_nBytes( IN RTMP_ADAPTER *pAd, IN USHORT Offset, IN UCHAR *buf, IN USHORT len, IN USHORT batchLen) { NTSTATUS Status = STATUS_SUCCESS; USHORT index = Offset, actLen = batchLen, leftLen = len; UCHAR *pSrc = buf; do { actLen = (actLen > batchLen ? batchLen : actLen); Status = RTUSB_VendorRequest( pAd, USBD_TRANSFER_DIRECTION_OUT, DEVICE_VENDOR_REQUEST_OUT, 0x6, 0, index, pSrc, actLen); if (Status != STATUS_SUCCESS) { if(Status != NDIS_STATUS_SUSPEND) { /* Do not print error message by default if in Radio_Off case. */ if(!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_RADIO_OFF)) DBGPRINT(RT_DEBUG_ERROR, ("%s: failed!!\n", __FUNCTION__)); } break; } index += actLen; leftLen -= actLen; pSrc = pSrc + actLen; }while(leftLen > 0); return Status; }
// For MT7662 and newer void usb_cfg_read_v3(RTMP_ADAPTER *ad, u32 *value) { int ret; u32 io_value; ret = RTUSB_VendorRequest(ad, (USBD_TRANSFER_DIRECTION_IN | USBD_SHORT_TRANSFER_OK), DEVICE_VENDOR_REQUEST_IN, 0x47, 0, U3DMA_WLCFG, &io_value, 4); *value = le2cpu32(io_value); if (ret) *value = 0xffffffff; }
/* ======================================================================== Routine Description: Arguments: Return Value: IRQL = Note: ======================================================================== */ NTSTATUS RTUSBWriteEEPROM( IN PRTMP_ADAPTER pAd, IN USHORT Offset, IN PUCHAR pData, IN USHORT length) { NTSTATUS Status = STATUS_SUCCESS; Status = RTUSB_VendorRequest( pAd, USBD_TRANSFER_DIRECTION_OUT, DEVICE_VENDOR_REQUEST_OUT, 0x8, 0, Offset, pData, length); return Status; }
NTSTATUS RTUSBSingleWrite( IN RTMP_ADAPTER *pAd, IN USHORT Offset, IN USHORT Value) { NTSTATUS Status; Status = RTUSB_VendorRequest( pAd, USBD_TRANSFER_DIRECTION_OUT, DEVICE_VENDOR_REQUEST_OUT, 0x2, Value, Offset, NULL, 0); return Status; }
/* ======================================================================== Routine Description: Write various length data to RT2573 Arguments: Return Value: IRQL = Note: ======================================================================== */ NTSTATUS RTUSBMultiWrite_OneByte( IN PRTMP_ADAPTER pAd, IN USHORT Offset, IN PUCHAR pData) { NTSTATUS Status; // TODO: In 2870, use this funciton carefully cause it's not stable. Status = RTUSB_VendorRequest( pAd, USBD_TRANSFER_DIRECTION_OUT, DEVICE_VENDOR_REQUEST_OUT, 0x6, 0, Offset, pData, 1); return Status; }
/* ======================================================================== Routine Description: Read various length data from RT2573 Arguments: Return Value: IRQL = Note: ======================================================================== */ NTSTATUS RTUSBMultiRead( IN PRTMP_ADAPTER pAd, IN USHORT Offset, OUT PUCHAR pData, IN USHORT length) { NTSTATUS Status; Status = RTUSB_VendorRequest( pAd, (USBD_TRANSFER_DIRECTION_IN | USBD_SHORT_TRANSFER_OK), DEVICE_VENDOR_REQUEST_IN, 0x7, 0, Offset, pData, length); return Status; }
int wmt_gpio_configrue(RTMP_ADAPTER *ad, PVOID io_buf, UINT Len) { NTSTATUS ret; UINT8 req; req = 0x01; ret = RTUSB_VendorRequest(ad, USBD_TRANSFER_DIRECTION_OUT, DEVICE_CLASS_REQUEST_OUT, req, 0x30, 0x00, io_buf, Len); if (ret) { DBGPRINT(RT_DEBUG_ERROR, ("wmt gpio configure command fail\n")); } return ret; }
/* ======================================================================== Routine Description: Write various length data to RT USB Wifi device, the maxima length should not large than 65535 bytes. Arguments: Return Value: IRQL = Note: Use this funciton carefully cause it may not stable in some special USB host controllers. ======================================================================== */ NTSTATUS RTUSBMultiWrite_nBytes( IN PRTMP_ADAPTER pAd, IN USHORT Offset, IN PUCHAR pData, IN USHORT length, IN USHORT batchLen) { NTSTATUS Status = STATUS_SUCCESS; USHORT index = Offset, actLen = batchLen, leftLen = length; PUCHAR pSrc = pData; do { actLen = (actLen > batchLen ? batchLen : actLen); Status = RTUSB_VendorRequest( pAd, USBD_TRANSFER_DIRECTION_OUT, DEVICE_VENDOR_REQUEST_OUT, 0x6, 0, index, pSrc, actLen); if (Status != STATUS_SUCCESS) { DBGPRINT(RT_DEBUG_ERROR, ("VendrCmdMultiWrite_nBytes failed!\n")); break; } index += actLen; leftLen -= actLen; pSrc = pSrc + actLen; }while(leftLen > 0); return Status; }
// For MT7662 and newer void usb_cfg_write_v3(RTMP_ADAPTER *ad, u32 value) { int ret; u32 io_value; io_value = cpu2le32(value); ret = RTUSB_VendorRequest(ad, USBD_TRANSFER_DIRECTION_OUT, DEVICE_VENDOR_REQUEST_OUT, 0x46, 0, U3DMA_WLCFG, &io_value, 4); if (ret) { DBGPRINT(RT_DEBUG_ERROR, ("usb cfg write fail\n")); return; } }
NTSTATUS RTUSBWriteEEPROM(RTMP_ADAPTER *pAd, USHORT adr, UCHAR *buf, USHORT len) { return RTUSB_VendorRequest(pAd, USBD_TRANSFER_DIRECTION_OUT, DEVICE_VENDOR_REQUEST_OUT, 0x8, 0, adr, buf, len); }
/* ======================================================================== Routine Description: Arguments: Return Value: IRQL = Note: ======================================================================== */ NTSTATUS RTUSBWakeUp(RTMP_ADAPTER *pAd) { return RTUSB_VendorRequest(pAd, USBD_TRANSFER_DIRECTION_OUT, DEVICE_VENDOR_REQUEST_OUT, 0x01, 0x09, 0, NULL, 0); }