Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/drv/usbhub/port_status.h

    r8123695a rd7f3040  
    4949
    5050/**
     51 * structure holding hub status and changes flags.
     52 * should not be accessed directly, use supplied getter/setter methods.
     53 *
     54 * For more information refer to table 11.16.2.5 in
     55 * "Universal Serial Bus Specification Revision 1.1"
     56 *
     57 */
     58typedef uint32_t usb_hub_status_t;
     59
     60/**
    5161 * set values in request to be it a port status request
    5262 * @param request
     
    5464 */
    5565static inline void usb_hub_set_port_status_request(
    56 usb_device_request_setup_packet_t * request, uint16_t port
    57 ){
     66        usb_device_request_setup_packet_t * request, uint16_t port
     67        ) {
    5868        request->index = port;
    5969        request->request_type = USB_HUB_REQ_TYPE_GET_PORT_STATUS;
     
    6373}
    6474
     75/**
     76 * set values in request to be it a port status request
     77 * @param request
     78 * @param port
     79 */
     80static inline void usb_hub_set_hub_status_request(
     81        usb_device_request_setup_packet_t * request
     82        ) {
     83        request->index = 0;
     84        request->request_type = USB_HUB_REQ_TYPE_GET_HUB_STATUS;
     85        request->request = USB_HUB_REQUEST_GET_STATUS;
     86        request->value = 0;
     87        request->length = 4;
     88}
    6589
    6690/**
     
    7094 */
    7195static inline usb_device_request_setup_packet_t *
    72 usb_hub_create_port_status_request(uint16_t port){
     96usb_hub_create_port_status_request(uint16_t port) {
    7397        usb_device_request_setup_packet_t * result =
    7498                usb_new(usb_device_request_setup_packet_t);
    75         usb_hub_set_port_status_request(result,port);
     99        usb_hub_set_port_status_request(result, port);
    76100        return result;
    77101}
    78102
    79 
    80103/**
    81104 * set the device request to be a port feature enable request
     
    85108 */
    86109static inline void usb_hub_set_enable_port_feature_request(
    87 usb_device_request_setup_packet_t * request, uint16_t port,
    88                 uint16_t feature_selector
    89 ){
     110        usb_device_request_setup_packet_t * request, uint16_t port,
     111        uint16_t feature_selector
     112        ) {
    90113        request->index = port;
    91114        request->request_type = USB_HUB_REQ_TYPE_SET_PORT_FEATURE;
     
    102125 */
    103126static inline void usb_hub_set_disable_port_feature_request(
    104 usb_device_request_setup_packet_t * request, uint16_t port,
    105                 uint16_t feature_selector
    106 ){
     127        usb_device_request_setup_packet_t * request, uint16_t port,
     128        uint16_t feature_selector
     129        ) {
    107130        request->index = port;
    108131        request->request_type = USB_HUB_REQ_TYPE_SET_PORT_FEATURE;
     
    118141 */
    119142static inline void usb_hub_set_enable_port_request(
    120 usb_device_request_setup_packet_t * request, uint16_t port
    121 ){
     143        usb_device_request_setup_packet_t * request, uint16_t port
     144        ) {
    122145        request->index = port;
    123146        request->request_type = USB_HUB_REQ_TYPE_SET_PORT_FEATURE;
     
    133156 */
    134157static inline usb_device_request_setup_packet_t *
    135 usb_hub_create_enable_port_request(uint16_t port){
     158usb_hub_create_enable_port_request(uint16_t port) {
    136159        usb_device_request_setup_packet_t * result =
    137160                usb_new(usb_device_request_setup_packet_t);
    138         usb_hub_set_enable_port_request(result,port);
     161        usb_hub_set_enable_port_request(result, port);
    139162        return result;
    140163}
     
    146169 */
    147170static inline void usb_hub_set_disable_port_request(
    148 usb_device_request_setup_packet_t * request, uint16_t port
    149 ){
     171        usb_device_request_setup_packet_t * request, uint16_t port
     172        ) {
    150173        request->index = port;
    151174        request->request_type = USB_HUB_REQ_TYPE_SET_PORT_FEATURE;
     
    161184 */
    162185static inline usb_device_request_setup_packet_t *
    163 usb_hub_create_disable_port_request(uint16_t port){
     186usb_hub_create_disable_port_request(uint16_t port) {
    164187        usb_device_request_setup_packet_t * result =
    165188                usb_new(usb_device_request_setup_packet_t);
    166         usb_hub_set_disable_port_request(result,port);
     189        usb_hub_set_disable_port_request(result, port);
    167190        return result;
    168191}
     
    174197 */
    175198static inline void usb_hub_set_reset_port_request(
    176 usb_device_request_setup_packet_t * request, uint16_t port
    177 ){
     199        usb_device_request_setup_packet_t * request, uint16_t port
     200        ) {
    178201        request->index = port;
    179202        request->request_type = USB_HUB_REQ_TYPE_SET_PORT_FEATURE;
     
    189212 */
    190213static inline usb_device_request_setup_packet_t *
    191 usb_hub_create_reset_port_request(uint16_t port){
     214usb_hub_create_reset_port_request(uint16_t port) {
    192215        usb_device_request_setup_packet_t * result =
    193216                usb_new(usb_device_request_setup_packet_t);
    194         usb_hub_set_reset_port_request(result,port);
     217        usb_hub_set_reset_port_request(result, port);
    195218        return result;
    196219}
     
    202225 */
    203226static inline void usb_hub_set_power_port_request(
    204 usb_device_request_setup_packet_t * request, uint16_t port
    205 ){
     227        usb_device_request_setup_packet_t * request, uint16_t port
     228        ) {
    206229        request->index = port;
    207230        request->request_type = USB_HUB_REQ_TYPE_SET_PORT_FEATURE;
     
    217240 */
    218241static inline void usb_hub_unset_power_port_request(
    219 usb_device_request_setup_packet_t * request, uint16_t port
    220 ){
     242        usb_device_request_setup_packet_t * request, uint16_t port
     243        ) {
    221244        request->index = port;
    222245        request->request_type = USB_HUB_REQ_TYPE_SET_PORT_FEATURE;
     
    226249}
    227250
    228 
    229 /** get i`th bit of port status */
    230 static inline bool usb_port_get_bit(usb_port_status_t * status, int idx)
    231 {
    232         return (((*status)>>(idx))%2);
    233 }
    234 
    235 /** set i`th bit of port status */
     251/**
     252 * get i`th bit of port status
     253 *
     254 * @param status
     255 * @param idx
     256 * @return
     257 */
     258static inline bool usb_port_get_bit(usb_port_status_t * status, int idx) {
     259        return ((*status)&(1 << idx))!=0;
     260}
     261
     262/**
     263 * set i`th bit of port status
     264 *
     265 * @param status
     266 * @param idx
     267 * @param value
     268 */
    236269static inline void usb_port_set_bit(
    237         usb_port_status_t * status, int idx, bool value)
    238 {
    239         (*status) = value?
    240                                ((*status)|(1<<(idx))):
    241                                ((*status)&(~(1<<(idx))));
    242 }
    243 
    244 //device connnected on port
    245 static inline bool usb_port_dev_connected(usb_port_status_t * status){
    246         return usb_port_get_bit(status,0);
    247 }
    248 
    249 static inline void usb_port_set_dev_connected(usb_port_status_t * status,bool connected){
    250         usb_port_set_bit(status,0,connected);
     270        usb_port_status_t * status, int idx, bool value) {
     271        (*status) = value ?
     272                ((*status) | (1 << (idx))) :
     273                ((*status)&(~(1 << (idx))));
     274}
     275
     276/**
     277 * get i`th bit of hub status
     278 *
     279 * @param status
     280 * @param idx
     281 * @return
     282 */
     283static inline bool usb_hub_get_bit(usb_hub_status_t * status, int idx) {
     284        return (*status)&(1 << idx);
     285}
     286
     287/**
     288 * set i`th bit of hub status
     289 *
     290 * @param status
     291 * @param idx
     292 * @param value
     293 */
     294static inline void usb_hub_set_bit(
     295        usb_hub_status_t * status, int idx, bool value) {
     296        (*status) = value ?
     297                ((*status) | (1 << (idx))) :
     298                ((*status)&(~(1 << (idx))));
     299}
     300
     301/**
     302 * connection status geter for port status
     303 *
     304 * @param status
     305 * @return true if there is something connected
     306 */
     307static inline bool usb_port_dev_connected(usb_port_status_t * status) {
     308        return usb_port_get_bit(status, 0);
     309}
     310
     311static inline void usb_port_set_dev_connected(usb_port_status_t * status, bool connected) {
     312        usb_port_set_bit(status, 0, connected);
    251313}
    252314
    253315//port enabled
    254 static inline bool usb_port_enabled(usb_port_status_t * status){
    255         return usb_port_get_bit(status,1);
    256 }
    257 
    258 static inline void usb_port_set_enabled(usb_port_status_t * status,bool enabled){
    259         usb_port_set_bit(status,1,enabled);
     316
     317/**
     318 * port enabled getter for port status
     319 *
     320 * @param status
     321 * @return true if the port is enabled
     322 */
     323static inline bool usb_port_enabled(usb_port_status_t * status) {
     324        return usb_port_get_bit(status, 1);
     325}
     326
     327static inline void usb_port_set_enabled(usb_port_status_t * status, bool enabled) {
     328        usb_port_set_bit(status, 1, enabled);
    260329}
    261330
    262331//port suspended
    263 static inline bool usb_port_suspended(usb_port_status_t * status){
    264         return usb_port_get_bit(status,2);
    265 }
    266 
    267 static inline void usb_port_set_suspended(usb_port_status_t * status,bool suspended){
    268         usb_port_set_bit(status,2,suspended);
     332/**
     333 * port suspended getter for port status
     334 *
     335 * @param status
     336 * @return true if port is suspended
     337 */
     338static inline bool usb_port_suspended(usb_port_status_t * status) {
     339        return usb_port_get_bit(status, 2);
     340}
     341
     342static inline void usb_port_set_suspended(usb_port_status_t * status, bool suspended) {
     343        usb_port_set_bit(status, 2, suspended);
    269344}
    270345
    271346//over currect
    272 static inline bool usb_port_over_current(usb_port_status_t * status){
    273         return usb_port_get_bit(status,3);
    274 }
    275 
    276 static inline void usb_port_set_over_current(usb_port_status_t * status,bool value){
    277         usb_port_set_bit(status,3,value);
     347/**
     348 * over current condition indicator getter for port status
     349 *
     350 * @param status
     351 * @return true if there is opver-current condition on the hub
     352 */
     353static inline bool usb_port_over_current(usb_port_status_t * status) {
     354        return usb_port_get_bit(status, 3);
     355}
     356
     357static inline void usb_port_set_over_current(usb_port_status_t * status, bool value) {
     358        usb_port_set_bit(status, 3, value);
    278359}
    279360
    280361//port reset
    281 static inline bool usb_port_reset(usb_port_status_t * status){
    282         return usb_port_get_bit(status,4);
    283 }
    284 
    285 static inline void usb_port_set_reset(usb_port_status_t * status,bool value){
    286         usb_port_set_bit(status,4,value);
     362/**
     363 * port reset indicator getter for port status
     364 *
     365 * @param status
     366 * @return true if port is reset
     367 */
     368static inline bool usb_port_reset(usb_port_status_t * status) {
     369        return usb_port_get_bit(status, 4);
     370}
     371
     372static inline void usb_port_set_reset(usb_port_status_t * status, bool value) {
     373        usb_port_set_bit(status, 4, value);
    287374}
    288375
    289376//powered
    290 static inline bool usb_port_powered(usb_port_status_t * status){
    291         return usb_port_get_bit(status,8);
    292 }
    293 
    294 static inline void usb_port_set_powered(usb_port_status_t * status,bool powered){
    295         usb_port_set_bit(status,8,powered);
     377/**
     378 * power state getter for port status
     379 *
     380 * @param status
     381 * @return true if port is powered
     382 */
     383static inline bool usb_port_powered(usb_port_status_t * status) {
     384        return usb_port_get_bit(status, 8);
     385}
     386
     387static inline void usb_port_set_powered(usb_port_status_t * status, bool powered) {
     388        usb_port_set_bit(status, 8, powered);
    296389}
    297390
    298391//low speed device attached
    299 static inline bool usb_port_low_speed(usb_port_status_t * status){
    300         return usb_port_get_bit(status,9);
    301 }
    302 
    303 static inline void usb_port_set_low_speed(usb_port_status_t * status,bool low_speed){
    304         usb_port_set_bit(status,9,low_speed);
    305 }
    306 
    307 //low speed device attached
    308 static inline bool usb_port_high_speed(usb_port_status_t * status){
    309         return usb_port_get_bit(status,10);
    310 }
    311 
    312 static inline void usb_port_set_high_speed(usb_port_status_t * status,bool high_speed){
    313         usb_port_set_bit(status,10,high_speed);
    314 }
    315 
    316 static inline usb_speed_t usb_port_speed(usb_port_status_t * status){
    317         if(usb_port_low_speed(status))
     392/**
     393 * low speed device on the port indicator
     394 *
     395 * @param status
     396 * @return true if low speed device is attached
     397 */
     398static inline bool usb_port_low_speed(usb_port_status_t * status) {
     399        return usb_port_get_bit(status, 9);
     400}
     401
     402static inline void usb_port_set_low_speed(usb_port_status_t * status, bool low_speed) {
     403        usb_port_set_bit(status, 9, low_speed);
     404}
     405
     406//high speed device attached
     407/**
     408 * high speed device on the port indicator
     409 *
     410 * @param status
     411 * @return true if high speed device is on port
     412 */
     413static inline bool usb_port_high_speed(usb_port_status_t * status) {
     414        return usb_port_get_bit(status, 10);
     415}
     416
     417static inline void usb_port_set_high_speed(usb_port_status_t * status, bool high_speed) {
     418        usb_port_set_bit(status, 10, high_speed);
     419}
     420
     421/**
     422 * speed getter for port status
     423 *
     424 * @param status
     425 * @return speed of usb device (for more see usb specification)
     426 */
     427static inline usb_speed_t usb_port_speed(usb_port_status_t * status) {
     428        if (usb_port_low_speed(status))
    318429                return USB_SPEED_LOW;
    319         if(usb_port_high_speed(status))
     430        if (usb_port_high_speed(status))
    320431                return USB_SPEED_HIGH;
    321432        return USB_SPEED_FULL;
     
    324435
    325436//connect change
    326 static inline bool usb_port_connect_change(usb_port_status_t * status){
    327         return usb_port_get_bit(status,16);
    328 }
    329 
    330 static inline void usb_port_set_connect_change(usb_port_status_t * status,bool change){
    331         usb_port_set_bit(status,16,change);
     437/**
     438 * port connect change indicator
     439 *
     440 * @param status
     441 * @return true if connection has changed
     442 */
     443static inline bool usb_port_connect_change(usb_port_status_t * status) {
     444        return usb_port_get_bit(status, 16);
     445}
     446
     447static inline void usb_port_set_connect_change(usb_port_status_t * status, bool change) {
     448        usb_port_set_bit(status, 16, change);
    332449}
    333450
    334451//port enable change
    335 static inline bool usb_port_enabled_change(usb_port_status_t * status){
    336         return usb_port_get_bit(status,17);
    337 }
    338 
    339 static inline void usb_port_set_enabled_change(usb_port_status_t * status,bool change){
    340         usb_port_set_bit(status,17,change);
     452/**
     453 * port enable change for port status
     454 *
     455 * @param status
     456 * @return true if the port has been enabled/disabled
     457 */
     458static inline bool usb_port_enabled_change(usb_port_status_t * status) {
     459        return usb_port_get_bit(status, 17);
     460}
     461
     462static inline void usb_port_set_enabled_change(usb_port_status_t * status, bool change) {
     463        usb_port_set_bit(status, 17, change);
    341464}
    342465
    343466//suspend change
    344 static inline bool usb_port_suspend_change(usb_port_status_t * status){
    345         return usb_port_get_bit(status,18);
    346 }
    347 
    348 static inline void usb_port_set_suspend_change(usb_port_status_t * status,bool change){
    349         usb_port_set_bit(status,18,change);
     467/**
     468 * port suspend change for port status
     469 *
     470 * @param status
     471 * @return ture if suspend status has changed
     472 */
     473static inline bool usb_port_suspend_change(usb_port_status_t * status) {
     474        return usb_port_get_bit(status, 18);
     475}
     476
     477static inline void usb_port_set_suspend_change(usb_port_status_t * status, bool change) {
     478        usb_port_set_bit(status, 18, change);
    350479}
    351480
    352481//over current change
    353 static inline bool usb_port_overcurrent_change(usb_port_status_t * status){
    354         return usb_port_get_bit(status,19);
    355 }
    356 
    357 static inline void usb_port_set_overcurrent_change(usb_port_status_t * status,bool change){
    358         usb_port_set_bit(status,19,change);
     482/**
     483 * over current change indicator
     484 *
     485 * @param status
     486 * @return true if over-current condition on port has changed
     487 */
     488static inline bool usb_port_overcurrent_change(usb_port_status_t * status) {
     489        return usb_port_get_bit(status, 19);
     490}
     491
     492static inline void usb_port_set_overcurrent_change(usb_port_status_t * status, bool change) {
     493        usb_port_set_bit(status, 19, change);
    359494}
    360495
    361496//reset change
    362 static inline bool usb_port_reset_completed(usb_port_status_t * status){
    363         return usb_port_get_bit(status,20);
    364 }
    365 
    366 static inline void usb_port_set_reset_completed(usb_port_status_t * status,bool completed){
    367         usb_port_set_bit(status,20,completed);
    368 }
    369 
     497/**
     498 * port reset change indicator
     499 * @param status
     500 * @return true if port has been reset
     501 */
     502static inline bool usb_port_reset_completed(usb_port_status_t * status) {
     503        return usb_port_get_bit(status, 20);
     504}
     505
     506static inline void usb_port_set_reset_completed(usb_port_status_t * status, bool completed) {
     507        usb_port_set_bit(status, 20, completed);
     508}
     509
     510//local power status
     511/**
     512 * local power lost indicator for hub status
     513 *
     514 * @param status
     515 * @return true if hub is not powered
     516 */
     517static inline bool usb_hub_local_power_lost(usb_hub_status_t * status) {
     518        return usb_hub_get_bit(status, 0);
     519}
     520
     521static inline void usb_hub_set_local_power_lost(usb_port_status_t * status,
     522        bool power_lost) {
     523        usb_hub_set_bit(status, 0, power_lost);
     524}
     525
     526//over current ocndition
     527/**
     528 * hub over-current indicator
     529 *
     530 * @param status
     531 * @return true if over-current condition occurred on hub
     532 */
     533static inline bool usb_hub_over_current(usb_hub_status_t * status) {
     534        return usb_hub_get_bit(status, 1);
     535}
     536
     537static inline void usb_hub_set_over_current(usb_port_status_t * status,
     538        bool over_current) {
     539        usb_hub_set_bit(status, 1, over_current);
     540}
     541
     542//local power change
     543/**
     544 * hub power change indicator
     545 *
     546 * @param status
     547 * @return true if local power status has been changed - power has been
     548 * dropped or re-established
     549 */
     550static inline bool usb_hub_local_power_change(usb_hub_status_t * status) {
     551        return usb_hub_get_bit(status, 16);
     552}
     553
     554static inline void usb_hub_set_local_power_change(usb_port_status_t * status,
     555        bool change) {
     556        usb_hub_set_bit(status, 16, change);
     557}
     558
     559//local power status
     560/**
     561 * hub over-current condition change indicator
     562 *
     563 * @param status
     564 * @return true if over-current condition has changed
     565 */
     566static inline bool usb_hub_over_current_change(usb_hub_status_t * status) {
     567        return usb_hub_get_bit(status, 17);
     568}
     569
     570static inline void usb_hub_set_over_current_change(usb_port_status_t * status,
     571        bool change) {
     572        usb_hub_set_bit(status, 17, change);
     573}
    370574
    371575
Note: See TracChangeset for help on using the changeset viewer.