forked from KolibriOS/kolibrios
USB: new API for drivers to query device characteristics
git-svn-id: svn://kolibrios.org@3745 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
parent
ec30458543
commit
87cf596e85
@ -697,6 +697,36 @@ endl
|
|||||||
ret
|
ret
|
||||||
endp
|
endp
|
||||||
|
|
||||||
|
; Part of API for drivers, see documentation for USBGetParam.
|
||||||
|
proc usb_get_param
|
||||||
|
virtual at esp
|
||||||
|
dd ? ; return address
|
||||||
|
.pipe dd ?
|
||||||
|
.param dd ?
|
||||||
|
end virtual
|
||||||
|
mov edx, [.param]
|
||||||
|
mov ecx, [.pipe]
|
||||||
|
mov eax, [ecx+usb_pipe.DeviceData]
|
||||||
|
test edx, edx
|
||||||
|
jz .get_device_descriptor
|
||||||
|
dec edx
|
||||||
|
jz .get_config_descriptor
|
||||||
|
dec edx
|
||||||
|
jz .get_speed
|
||||||
|
or eax, -1
|
||||||
|
ret 8
|
||||||
|
.get_device_descriptor:
|
||||||
|
add eax, usb_device_data.DeviceDescriptor
|
||||||
|
ret 8
|
||||||
|
.get_config_descriptor:
|
||||||
|
movzx ecx, [eax+usb_device_data.DeviceDescrSize]
|
||||||
|
lea eax, [eax+ecx+usb_device_data.DeviceDescriptor]
|
||||||
|
ret 8
|
||||||
|
.get_speed:
|
||||||
|
movzx eax, [eax+usb_device_data.Speed]
|
||||||
|
ret 8
|
||||||
|
endp
|
||||||
|
|
||||||
; Initialize software part of usb_gtd. Called from controller-specific code
|
; Initialize software part of usb_gtd. Called from controller-specific code
|
||||||
; somewhere in AllocTransfer with eax -> next (inactive) usb_gtd,
|
; somewhere in AllocTransfer with eax -> next (inactive) usb_gtd,
|
||||||
; ebx -> usb_pipe, ebp frame from call to AllocTransfer with [.td] ->
|
; ebx -> usb_pipe, ebp frame from call to AllocTransfer with [.td] ->
|
||||||
|
@ -100,6 +100,7 @@ iglobal
|
|||||||
szUSBClosePipe db 'USBClosePipe',0
|
szUSBClosePipe db 'USBClosePipe',0
|
||||||
szUSBNormalTransferAsync db 'USBNormalTransferAsync',0
|
szUSBNormalTransferAsync db 'USBNormalTransferAsync',0
|
||||||
szUSBControlTransferAsync db 'USBControlTransferAsync',0
|
szUSBControlTransferAsync db 'USBControlTransferAsync',0
|
||||||
|
szUSBGetParam db 'USBGetParam',0
|
||||||
|
|
||||||
szNetRegDev db 'NetRegDev',0
|
szNetRegDev db 'NetRegDev',0
|
||||||
szNetUnRegDev db 'NetUnRegDev',0
|
szNetUnRegDev db 'NetUnRegDev',0
|
||||||
@ -196,6 +197,7 @@ kernel_export:
|
|||||||
dd szUSBClosePipe , usb_close_pipe
|
dd szUSBClosePipe , usb_close_pipe
|
||||||
dd szUSBNormalTransferAsync, usb_normal_transfer_async
|
dd szUSBNormalTransferAsync, usb_normal_transfer_async
|
||||||
dd szUSBControlTransferAsync, usb_control_async
|
dd szUSBControlTransferAsync, usb_control_async
|
||||||
|
dd szUSBGetParam , usb_get_param
|
||||||
|
|
||||||
dd szNetRegDev , NET_add_device
|
dd szNetRegDev , NET_add_device
|
||||||
dd szNetUnRegDev , NET_remove_device
|
dd szNetUnRegDev , NET_remove_device
|
||||||
|
@ -60,8 +60,7 @@ called several times with the same 'configdescr' and different 'interfacedescr'.
|
|||||||
The returned value NULL means that the initialization has failed.
|
The returned value NULL means that the initialization has failed.
|
||||||
Any other value means that configuration was successful; the kernel does not
|
Any other value means that configuration was successful; the kernel does not
|
||||||
try to interpret the value. It can be, for example, pointer to the internal
|
try to interpret the value. It can be, for example, pointer to the internal
|
||||||
data allocated with Kmalloc, or index in some internal table. Remember that
|
data allocated with Kmalloc, or index in some internal table.
|
||||||
Kmalloc() is NOT stdcall, it destroys ebx.
|
|
||||||
|
|
||||||
The driver can implement the function
|
The driver can implement the function
|
||||||
|
|
||||||
@ -173,22 +172,20 @@ The parameter 'length' is the number of bytes transferred. For
|
|||||||
control transfers, this includes 8 bytes from SETUP stage, so
|
control transfers, this includes 8 bytes from SETUP stage, so
|
||||||
0 means that SETUP stage failed and 'size'+8 means full transfer.
|
0 means that SETUP stage failed and 'size'+8 means full transfer.
|
||||||
The parameter 'status' is nonzero if an error occured.
|
The parameter 'status' is nonzero if an error occured.
|
||||||
USB_STATUS_OK = 0 ; no error
|
USB_STATUS_OK = 0 ; no error
|
||||||
USB_STATUS_CRC = 1 ; CRC error
|
USB_STATUS_CRC = 1 ; CRC error
|
||||||
USB_STATUS_BITSTUFF = 2 ; bit stuffing violation
|
USB_STATUS_BITSTUFF = 2 ; bit stuffing violation
|
||||||
USB_STATUS_TOGGLE = 3 ; data toggle mismatch
|
USB_STATUS_TOGGLE = 3 ; data toggle mismatch
|
||||||
USB_STATUS_STALL = 4 ; device returned STALL
|
USB_STATUS_STALL = 4 ; device returned STALL
|
||||||
USB_STATUS_NORESPONSE = 5 ; device not responding
|
USB_STATUS_NORESPONSE = 5 ; device not responding
|
||||||
USB_STATUS_PIDCHECK = 6 ; invalid PID check bits
|
USB_STATUS_PIDCHECK = 6 ; invalid PID check bits
|
||||||
USB_STATUS_WRONGPID = 7 ; unexpected PID value
|
USB_STATUS_WRONGPID = 7 ; unexpected PID value
|
||||||
USB_STATUS_OVERRUN = 8 ; too many data from endpoint
|
USB_STATUS_OVERRUN = 8 ; too many data from endpoint
|
||||||
USB_STATUS_UNDERRUN = 9 ; too few data from endpoint
|
USB_STATUS_UNDERRUN = 9 ; too few data from endpoint
|
||||||
USB_STATUS_BUFOVERRUN = 12 ; overflow of internal controller buffer
|
USB_STATUS_BUFOVERRUN = 12 ; overflow of internal controller buffer
|
||||||
; possible only for isochronous transfers
|
USB_STATUS_BUFUNDERRUN = 13 ; underflow of internal controller buffer
|
||||||
USB_STATUS_BUFUNDERRUN = 13 ; underflow of internal controller buffer
|
USB_STATUS_CLOSED = 16 ; pipe closed, either explicitly with USBClosePipe
|
||||||
; possible only for isochronous transfers
|
; or due to device disconnect
|
||||||
USB_STATUS_CLOSED = 16 ; pipe closed, either explicitly with USBClosePipe
|
|
||||||
; or due to device disconnect
|
|
||||||
|
|
||||||
If several transfers are queued for the same pipe, their callback functions
|
If several transfers are queued for the same pipe, their callback functions
|
||||||
are called in the same order as they were queued.
|
are called in the same order as they were queued.
|
||||||
@ -196,3 +193,13 @@ When a pipe is closed, either explicitly with USBClosePipe, or
|
|||||||
implicitly due to device disconnect, all callback functions are called
|
implicitly due to device disconnect, all callback functions are called
|
||||||
with USB_STATUS_CLOSED. The call to DeviceDisconnected() occurs after
|
with USB_STATUS_CLOSED. The call to DeviceDisconnected() occurs after
|
||||||
all callbacks.
|
all callbacks.
|
||||||
|
|
||||||
|
void* __stdcall USBGetParam(void* pipe0, int param);
|
||||||
|
Returns miscellaneous parameters of the device.
|
||||||
|
pipe0 is the pointer to the config pipe.
|
||||||
|
param = 0: return pointer to device descriptor
|
||||||
|
param = 1: return pointer to config descriptor, same as passed to AddDevice
|
||||||
|
param = 2: return speed at which the device is operating, one of
|
||||||
|
USB_SPEED_FS = 0 ; full-speed
|
||||||
|
USB_SPEED_LS = 1 ; low-speed
|
||||||
|
USB_SPEED_HS = 2 ; high-speed
|
||||||
|
Loading…
Reference in New Issue
Block a user