Changes in uspace/drv/usbhub/ports.c [af6136d:5c1a65e] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/drv/usbhub/ports.c
raf6136d r5c1a65e 47 47 #include "port_status.h" 48 48 49 50 49 /** Information for fibril for device discovery. */ 51 50 struct add_device_phase1 { … … 65 64 * any function here and must be cleared by hand 66 65 */ 67 static const int non_handled_changes[] = 66 static const int non_handled_changes[] = { 68 67 USB_HUB_FEATURE_C_PORT_ENABLE, 69 68 USB_HUB_FEATURE_C_PORT_SUSPEND … … 71 70 72 71 static void usb_hub_removed_device( 73 usb_hub_info_t *hub, uint16_t port);74 75 static void usb_hub_port_reset_completed(usb_hub_info_t * 76 77 78 static void usb_hub_port_over_current(usb_hub_info_t * 79 72 usb_hub_info_t *hub, uint16_t port); 73 74 static void usb_hub_port_reset_completed(usb_hub_info_t *hub, 75 uint16_t port, uint32_t status); 76 77 static void usb_hub_port_over_current(usb_hub_info_t *hub, 78 uint16_t port, uint32_t status); 80 79 81 80 static int get_port_status(usb_pipe_t *ctrl_pipe, size_t port, … … 96 95 * @param port port number, starting from 1 97 96 */ 98 void usb_hub_process_interrupt(usb_hub_info_t * 99 100 usb_log_debug(" interrupt at port %zu\n", (size_t) port);97 void usb_hub_process_interrupt(usb_hub_info_t *hub, 98 uint16_t port) { 99 usb_log_debug("Interrupt at port %zu\n", (size_t) port); 101 100 //determine type of change 102 101 //usb_pipe_t *pipe = hub->control_pipe; … … 134 133 if (usb_port_is_status(status, USB_HUB_FEATURE_C_PORT_OVER_CURRENT)) { 135 134 //check if it was not auto-resolved 136 usb_log_debug(" overcurrent change on port\n");135 usb_log_debug("Overcurrent change on port\n"); 137 136 usb_hub_port_over_current(hub, port, status); 138 137 } … … 141 140 usb_hub_port_reset_completed(hub, port, status); 142 141 } 143 usb_log_debug(" status x%x : %d\n ", status, status);142 usb_log_debug("Status x%x : %d\n ", status, status); 144 143 145 144 usb_port_status_set_bit( 146 &status, USB_HUB_FEATURE_C_PORT_CONNECTION, false);145 &status, USB_HUB_FEATURE_C_PORT_CONNECTION, false); 147 146 usb_port_status_set_bit( 148 &status, USB_HUB_FEATURE_C_PORT_RESET, false);147 &status, USB_HUB_FEATURE_C_PORT_RESET, false); 149 148 usb_port_status_set_bit( 150 &status, USB_HUB_FEATURE_C_PORT_OVER_CURRENT, false);151 149 &status, USB_HUB_FEATURE_C_PORT_OVER_CURRENT, false); 150 152 151 //clearing not yet handled changes 153 152 unsigned int feature_idx; 154 for(feature_idx = 0;feature_idx<non_handled_changes_count; 155 ++feature_idx){ 153 for (feature_idx = 0; 154 feature_idx < non_handled_changes_count; 155 ++feature_idx) { 156 156 unsigned int bit_idx = non_handled_changes[feature_idx]; 157 if (status & (1<<bit_idx)){157 if (status & (1 << bit_idx)) { 158 158 usb_log_info( 159 " there was not yet handled change on port %d: %d"159 "There was not yet handled change on port %d: %d" 160 160 ";clearing it\n", 161 port, bit_idx);161 port, bit_idx); 162 162 int opResult = usb_hub_clear_port_feature( 163 163 hub->control_pipe, … … 165 165 if (opResult != EOK) { 166 166 usb_log_warning( 167 " could not clear port flag %d: %d\n",168 bit_idx, opResult167 "Could not clear port flag %d: %s\n", 168 bit_idx, str_error(opResult) 169 169 ); 170 170 } 171 171 usb_port_status_set_bit( 172 &status, bit_idx, false);172 &status, bit_idx, false); 173 173 } 174 174 } 175 if (status>>16){176 usb_log_info(" there is still some unhandled change %X\n",175 if (status >> 16) { 176 usb_log_info("There is still some unhandled change %X\n", 177 177 status); 178 178 } 179 179 } 180 181 180 182 181 /** … … 190 189 */ 191 190 static void usb_hub_removed_device( 192 usb_hub_info_t *hub, uint16_t port) {191 usb_hub_info_t *hub, uint16_t port) { 193 192 194 193 int opResult = usb_hub_clear_port_feature(hub->control_pipe, 195 194 port, USB_HUB_FEATURE_C_PORT_CONNECTION); 196 195 if (opResult != EOK) { 197 usb_log_warning(" could not clear port-change-connection flag\n");196 usb_log_warning("Could not clear port-change-connection flag\n"); 198 197 } 199 198 /** \TODO remove device from device manager - not yet implemented in … … 231 230 } 232 231 233 234 232 /** 235 233 * Process port reset change … … 241 239 * @param status 242 240 */ 243 static void usb_hub_port_reset_completed(usb_hub_info_t * 244 uint16_t port, uint32_t status){241 static void usb_hub_port_reset_completed(usb_hub_info_t *hub, 242 uint16_t port, uint32_t status) { 245 243 usb_log_debug("Port %zu reset complete.\n", (size_t) port); 246 244 if (usb_port_is_status(status, USB_HUB_FEATURE_PORT_ENABLE)) { … … 274 272 * @param port port number, starting from 1 275 273 */ 276 static void usb_hub_port_over_current(usb_hub_info_t * 277 274 static void usb_hub_port_over_current(usb_hub_info_t *hub, 275 uint16_t port, uint32_t status) { 278 276 int opResult; 279 if (usb_port_is_status(status, USB_HUB_FEATURE_PORT_OVER_CURRENT)){277 if (usb_port_is_status(status, USB_HUB_FEATURE_PORT_OVER_CURRENT)) { 280 278 opResult = usb_hub_clear_port_feature(hub->control_pipe, 281 279 port, USB_HUB_FEATURE_PORT_POWER); 282 280 if (opResult != EOK) { 283 usb_log_error(" cannot power off port %d; %d\n",284 port, opResult);281 usb_log_error("Cannot power off port %d; %s\n", 282 port, str_error(opResult)); 285 283 } 286 } else{284 } else { 287 285 opResult = usb_hub_set_port_feature(hub->control_pipe, 288 286 port, USB_HUB_FEATURE_PORT_POWER); 289 287 if (opResult != EOK) { 290 usb_log_error(" cannot power on port %d; %d\n",291 port, opResult);288 usb_log_error("Cannot power on port %d; %s\n", 289 port, str_error(opResult)); 292 290 } 293 291 } … … 302 300 */ 303 301 static int get_port_status(usb_pipe_t *ctrl_pipe, size_t port, 304 usb_port_status_t *status) 305 { 302 usb_port_status_t *status) { 306 303 size_t recv_size; 307 304 usb_device_request_setup_packet_t request; … … 310 307 usb_hub_set_port_status_request(&request, port); 311 308 int rc = usb_pipe_control_read(ctrl_pipe, 312 &request, sizeof (usb_device_request_setup_packet_t),313 &status_tmp, sizeof (status_tmp), &recv_size);309 &request, sizeof (usb_device_request_setup_packet_t), 310 &status_tmp, sizeof (status_tmp), &recv_size); 314 311 if (rc != EOK) { 315 312 return rc; … … 336 333 * @return Error code. 337 334 */ 338 static int enable_port_callback(int port_no, void *arg) 339 { 335 static int enable_port_callback(int port_no, void *arg) { 340 336 usb_hub_info_t *hub = arg; 341 337 int rc; … … 345 341 usb_hub_set_reset_port_request(&request, port_no); 346 342 rc = usb_pipe_control_write(hub->control_pipe, 347 &request, sizeof (request), NULL, 0);343 &request, sizeof (request), NULL, 0); 348 344 if (rc != EOK) { 349 345 usb_log_warning("Port reset failed: %s.\n", str_error(rc)); … … 375 371 * @return 0 Always. 376 372 */ 377 static int add_device_phase1_worker_fibril(void *arg) 378 { 373 static int add_device_phase1_worker_fibril(void *arg) { 379 374 struct add_device_phase1 *data 380 375 = (struct add_device_phase1 *) arg; … … 418 413 } 419 414 420 421 415 /** Start device adding when connection change is detected. 422 416 * … … 429 423 */ 430 424 static int create_add_device_fibril(usb_hub_info_t *hub, size_t port, 431 usb_speed_t speed) 432 { 425 usb_speed_t speed) { 433 426 struct add_device_phase1 *data 434 = malloc(sizeof (struct add_device_phase1));427 = malloc(sizeof (struct add_device_phase1)); 435 428 if (data == NULL) { 436 429 return ENOMEM;
Note:
See TracChangeset
for help on using the changeset viewer.