Ignore:
File:
1 edited

Legend:

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

    rd7f3040 r8123695a  
    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  */
    58 typedef uint32_t usb_hub_status_t;
    59 
    60 /**
    6151 * set values in request to be it a port status request
    6252 * @param request
     
    6454 */
    6555static inline void usb_hub_set_port_status_request(
    66         usb_device_request_setup_packet_t * request, uint16_t port
    67         ) {
     56usb_device_request_setup_packet_t * request, uint16_t port
     57){
    6858        request->index = port;
    6959        request->request_type = USB_HUB_REQ_TYPE_GET_PORT_STATUS;
     
    7363}
    7464
    75 /**
    76  * set values in request to be it a port status request
    77  * @param request
    78  * @param port
    79  */
    80 static 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 }
    8965
    9066/**
     
    9470 */
    9571static inline usb_device_request_setup_packet_t *
    96 usb_hub_create_port_status_request(uint16_t port) {
     72usb_hub_create_port_status_request(uint16_t port){
    9773        usb_device_request_setup_packet_t * result =
    9874                usb_new(usb_device_request_setup_packet_t);
    99         usb_hub_set_port_status_request(result, port);
     75        usb_hub_set_port_status_request(result,port);
    10076        return result;
    10177}
    10278
     79
    10380/**
    10481 * set the device request to be a port feature enable request
     
    10885 */
    10986static inline void usb_hub_set_enable_port_feature_request(
    110         usb_device_request_setup_packet_t * request, uint16_t port,
    111         uint16_t feature_selector
    112         ) {
     87usb_device_request_setup_packet_t * request, uint16_t port,
     88                uint16_t feature_selector
     89){
    11390        request->index = port;
    11491        request->request_type = USB_HUB_REQ_TYPE_SET_PORT_FEATURE;
     
    125102 */
    126103static inline void usb_hub_set_disable_port_feature_request(
    127         usb_device_request_setup_packet_t * request, uint16_t port,
    128         uint16_t feature_selector
    129         ) {
     104usb_device_request_setup_packet_t * request, uint16_t port,
     105                uint16_t feature_selector
     106){
    130107        request->index = port;
    131108        request->request_type = USB_HUB_REQ_TYPE_SET_PORT_FEATURE;
     
    141118 */
    142119static inline void usb_hub_set_enable_port_request(
    143         usb_device_request_setup_packet_t * request, uint16_t port
    144         ) {
     120usb_device_request_setup_packet_t * request, uint16_t port
     121){
    145122        request->index = port;
    146123        request->request_type = USB_HUB_REQ_TYPE_SET_PORT_FEATURE;
     
    156133 */
    157134static inline usb_device_request_setup_packet_t *
    158 usb_hub_create_enable_port_request(uint16_t port) {
     135usb_hub_create_enable_port_request(uint16_t port){
    159136        usb_device_request_setup_packet_t * result =
    160137                usb_new(usb_device_request_setup_packet_t);
    161         usb_hub_set_enable_port_request(result, port);
     138        usb_hub_set_enable_port_request(result,port);
    162139        return result;
    163140}
     
    169146 */
    170147static inline void usb_hub_set_disable_port_request(
    171         usb_device_request_setup_packet_t * request, uint16_t port
    172         ) {
     148usb_device_request_setup_packet_t * request, uint16_t port
     149){
    173150        request->index = port;
    174151        request->request_type = USB_HUB_REQ_TYPE_SET_PORT_FEATURE;
     
    184161 */
    185162static inline usb_device_request_setup_packet_t *
    186 usb_hub_create_disable_port_request(uint16_t port) {
     163usb_hub_create_disable_port_request(uint16_t port){
    187164        usb_device_request_setup_packet_t * result =
    188165                usb_new(usb_device_request_setup_packet_t);
    189         usb_hub_set_disable_port_request(result, port);
     166        usb_hub_set_disable_port_request(result,port);
    190167        return result;
    191168}
     
    197174 */
    198175static inline void usb_hub_set_reset_port_request(
    199         usb_device_request_setup_packet_t * request, uint16_t port
    200         ) {
     176usb_device_request_setup_packet_t * request, uint16_t port
     177){
    201178        request->index = port;
    202179        request->request_type = USB_HUB_REQ_TYPE_SET_PORT_FEATURE;
     
    212189 */
    213190static inline usb_device_request_setup_packet_t *
    214 usb_hub_create_reset_port_request(uint16_t port) {
     191usb_hub_create_reset_port_request(uint16_t port){
    215192        usb_device_request_setup_packet_t * result =
    216193                usb_new(usb_device_request_setup_packet_t);
    217         usb_hub_set_reset_port_request(result, port);
     194        usb_hub_set_reset_port_request(result,port);
    218195        return result;
    219196}
     
    225202 */
    226203static inline void usb_hub_set_power_port_request(
    227         usb_device_request_setup_packet_t * request, uint16_t port
    228         ) {
     204usb_device_request_setup_packet_t * request, uint16_t port
     205){
    229206        request->index = port;
    230207        request->request_type = USB_HUB_REQ_TYPE_SET_PORT_FEATURE;
     
    240217 */
    241218static inline void usb_hub_unset_power_port_request(
    242         usb_device_request_setup_packet_t * request, uint16_t port
    243         ) {
     219usb_device_request_setup_packet_t * request, uint16_t port
     220){
    244221        request->index = port;
    245222        request->request_type = USB_HUB_REQ_TYPE_SET_PORT_FEATURE;
     
    249226}
    250227
    251 /**
    252  * get i`th bit of port status
    253  *
    254  * @param status
    255  * @param idx
    256  * @return
    257  */
    258 static 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  */
     228
     229/** get i`th bit of port status */
     230static 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 */
    269236static inline void usb_port_set_bit(
    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  */
    283 static 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  */
    294 static 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  */
    307 static inline bool usb_port_dev_connected(usb_port_status_t * status) {
    308         return usb_port_get_bit(status, 0);
    309 }
    310 
    311 static inline void usb_port_set_dev_connected(usb_port_status_t * status, bool connected) {
    312         usb_port_set_bit(status, 0, connected);
     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
     245static inline bool usb_port_dev_connected(usb_port_status_t * status){
     246        return usb_port_get_bit(status,0);
     247}
     248
     249static inline void usb_port_set_dev_connected(usb_port_status_t * status,bool connected){
     250        usb_port_set_bit(status,0,connected);
    313251}
    314252
    315253//port enabled
    316 
    317 /**
    318  * port enabled getter for port status
    319  *
    320  * @param status
    321  * @return true if the port is enabled
    322  */
    323 static inline bool usb_port_enabled(usb_port_status_t * status) {
    324         return usb_port_get_bit(status, 1);
    325 }
    326 
    327 static inline void usb_port_set_enabled(usb_port_status_t * status, bool enabled) {
    328         usb_port_set_bit(status, 1, enabled);
     254static inline bool usb_port_enabled(usb_port_status_t * status){
     255        return usb_port_get_bit(status,1);
     256}
     257
     258static inline void usb_port_set_enabled(usb_port_status_t * status,bool enabled){
     259        usb_port_set_bit(status,1,enabled);
    329260}
    330261
    331262//port suspended
    332 /**
    333  * port suspended getter for port status
    334  *
    335  * @param status
    336  * @return true if port is suspended
    337  */
    338 static inline bool usb_port_suspended(usb_port_status_t * status) {
    339         return usb_port_get_bit(status, 2);
    340 }
    341 
    342 static inline void usb_port_set_suspended(usb_port_status_t * status, bool suspended) {
    343         usb_port_set_bit(status, 2, suspended);
     263static inline bool usb_port_suspended(usb_port_status_t * status){
     264        return usb_port_get_bit(status,2);
     265}
     266
     267static inline void usb_port_set_suspended(usb_port_status_t * status,bool suspended){
     268        usb_port_set_bit(status,2,suspended);
    344269}
    345270
    346271//over currect
    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  */
    353 static inline bool usb_port_over_current(usb_port_status_t * status) {
    354         return usb_port_get_bit(status, 3);
    355 }
    356 
    357 static inline void usb_port_set_over_current(usb_port_status_t * status, bool value) {
    358         usb_port_set_bit(status, 3, value);
     272static inline bool usb_port_over_current(usb_port_status_t * status){
     273        return usb_port_get_bit(status,3);
     274}
     275
     276static inline void usb_port_set_over_current(usb_port_status_t * status,bool value){
     277        usb_port_set_bit(status,3,value);
    359278}
    360279
    361280//port reset
    362 /**
    363  * port reset indicator getter for port status
    364  *
    365  * @param status
    366  * @return true if port is reset
    367  */
    368 static inline bool usb_port_reset(usb_port_status_t * status) {
    369         return usb_port_get_bit(status, 4);
    370 }
    371 
    372 static inline void usb_port_set_reset(usb_port_status_t * status, bool value) {
    373         usb_port_set_bit(status, 4, value);
     281static inline bool usb_port_reset(usb_port_status_t * status){
     282        return usb_port_get_bit(status,4);
     283}
     284
     285static inline void usb_port_set_reset(usb_port_status_t * status,bool value){
     286        usb_port_set_bit(status,4,value);
    374287}
    375288
    376289//powered
    377 /**
    378  * power state getter for port status
    379  *
    380  * @param status
    381  * @return true if port is powered
    382  */
    383 static inline bool usb_port_powered(usb_port_status_t * status) {
    384         return usb_port_get_bit(status, 8);
    385 }
    386 
    387 static inline void usb_port_set_powered(usb_port_status_t * status, bool powered) {
    388         usb_port_set_bit(status, 8, powered);
     290static inline bool usb_port_powered(usb_port_status_t * status){
     291        return usb_port_get_bit(status,8);
     292}
     293
     294static inline void usb_port_set_powered(usb_port_status_t * status,bool powered){
     295        usb_port_set_bit(status,8,powered);
    389296}
    390297
    391298//low speed device attached
    392 /**
    393  * low speed device on the port indicator
    394  *
    395  * @param status
    396  * @return true if low speed device is attached
    397  */
    398 static inline bool usb_port_low_speed(usb_port_status_t * status) {
    399         return usb_port_get_bit(status, 9);
    400 }
    401 
    402 static 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  */
    413 static inline bool usb_port_high_speed(usb_port_status_t * status) {
    414         return usb_port_get_bit(status, 10);
    415 }
    416 
    417 static 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  */
    427 static inline usb_speed_t usb_port_speed(usb_port_status_t * status) {
    428         if (usb_port_low_speed(status))
     299static inline bool usb_port_low_speed(usb_port_status_t * status){
     300        return usb_port_get_bit(status,9);
     301}
     302
     303static 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
     308static inline bool usb_port_high_speed(usb_port_status_t * status){
     309        return usb_port_get_bit(status,10);
     310}
     311
     312static 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
     316static inline usb_speed_t usb_port_speed(usb_port_status_t * status){
     317        if(usb_port_low_speed(status))
    429318                return USB_SPEED_LOW;
    430         if (usb_port_high_speed(status))
     319        if(usb_port_high_speed(status))
    431320                return USB_SPEED_HIGH;
    432321        return USB_SPEED_FULL;
     
    435324
    436325//connect change
    437 /**
    438  * port connect change indicator
    439  *
    440  * @param status
    441  * @return true if connection has changed
    442  */
    443 static inline bool usb_port_connect_change(usb_port_status_t * status) {
    444         return usb_port_get_bit(status, 16);
    445 }
    446 
    447 static inline void usb_port_set_connect_change(usb_port_status_t * status, bool change) {
    448         usb_port_set_bit(status, 16, change);
     326static inline bool usb_port_connect_change(usb_port_status_t * status){
     327        return usb_port_get_bit(status,16);
     328}
     329
     330static inline void usb_port_set_connect_change(usb_port_status_t * status,bool change){
     331        usb_port_set_bit(status,16,change);
    449332}
    450333
    451334//port enable change
    452 /**
    453  * port enable change for port status
    454  *
    455  * @param status
    456  * @return true if the port has been enabled/disabled
    457  */
    458 static inline bool usb_port_enabled_change(usb_port_status_t * status) {
    459         return usb_port_get_bit(status, 17);
    460 }
    461 
    462 static inline void usb_port_set_enabled_change(usb_port_status_t * status, bool change) {
    463         usb_port_set_bit(status, 17, change);
     335static inline bool usb_port_enabled_change(usb_port_status_t * status){
     336        return usb_port_get_bit(status,17);
     337}
     338
     339static inline void usb_port_set_enabled_change(usb_port_status_t * status,bool change){
     340        usb_port_set_bit(status,17,change);
    464341}
    465342
    466343//suspend change
    467 /**
    468  * port suspend change for port status
    469  *
    470  * @param status
    471  * @return ture if suspend status has changed
    472  */
    473 static inline bool usb_port_suspend_change(usb_port_status_t * status) {
    474         return usb_port_get_bit(status, 18);
    475 }
    476 
    477 static inline void usb_port_set_suspend_change(usb_port_status_t * status, bool change) {
    478         usb_port_set_bit(status, 18, change);
     344static inline bool usb_port_suspend_change(usb_port_status_t * status){
     345        return usb_port_get_bit(status,18);
     346}
     347
     348static inline void usb_port_set_suspend_change(usb_port_status_t * status,bool change){
     349        usb_port_set_bit(status,18,change);
    479350}
    480351
    481352//over current change
    482 /**
    483  * over current change indicator
    484  *
    485  * @param status
    486  * @return true if over-current condition on port has changed
    487  */
    488 static inline bool usb_port_overcurrent_change(usb_port_status_t * status) {
    489         return usb_port_get_bit(status, 19);
    490 }
    491 
    492 static inline void usb_port_set_overcurrent_change(usb_port_status_t * status, bool change) {
    493         usb_port_set_bit(status, 19, change);
     353static inline bool usb_port_overcurrent_change(usb_port_status_t * status){
     354        return usb_port_get_bit(status,19);
     355}
     356
     357static inline void usb_port_set_overcurrent_change(usb_port_status_t * status,bool change){
     358        usb_port_set_bit(status,19,change);
    494359}
    495360
    496361//reset change
    497 /**
    498  * port reset change indicator
    499  * @param status
    500  * @return true if port has been reset
    501  */
    502 static inline bool usb_port_reset_completed(usb_port_status_t * status) {
    503         return usb_port_get_bit(status, 20);
    504 }
    505 
    506 static 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  */
    517 static inline bool usb_hub_local_power_lost(usb_hub_status_t * status) {
    518         return usb_hub_get_bit(status, 0);
    519 }
    520 
    521 static 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  */
    533 static inline bool usb_hub_over_current(usb_hub_status_t * status) {
    534         return usb_hub_get_bit(status, 1);
    535 }
    536 
    537 static 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  */
    550 static inline bool usb_hub_local_power_change(usb_hub_status_t * status) {
    551         return usb_hub_get_bit(status, 16);
    552 }
    553 
    554 static 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  */
    566 static inline bool usb_hub_over_current_change(usb_hub_status_t * status) {
    567         return usb_hub_get_bit(status, 17);
    568 }
    569 
    570 static 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 }
     362static inline bool usb_port_reset_completed(usb_port_status_t * status){
     363        return usb_port_get_bit(status,20);
     364}
     365
     366static inline void usb_port_set_reset_completed(usb_port_status_t * status,bool completed){
     367        usb_port_set_bit(status,20,completed);
     368}
     369
    574370
    575371
Note: See TracChangeset for help on using the changeset viewer.