2343 } |
2343 } |
2344 |
2344 |
2345 /*****************************************************************************/ |
2345 /*****************************************************************************/ |
2346 |
2346 |
2347 int ecrt_master_write_idn(ec_master_t *master, uint16_t slave_position, |
2347 int ecrt_master_write_idn(ec_master_t *master, uint16_t slave_position, |
2348 uint16_t idn, uint8_t *data, size_t data_size, uint16_t *error_code) |
2348 uint8_t drive_no, uint16_t idn, uint8_t *data, size_t data_size, |
|
2349 uint16_t *error_code) |
2349 { |
2350 { |
2350 ec_master_soe_request_t request; |
2351 ec_master_soe_request_t request; |
2351 int retval; |
2352 int retval; |
2352 |
2353 |
|
2354 if (drive_no > 7) { |
|
2355 EC_MASTER_ERR(master, "Invalid drive number!\n"); |
|
2356 return -EINVAL; |
|
2357 } |
|
2358 |
2353 INIT_LIST_HEAD(&request.list); |
2359 INIT_LIST_HEAD(&request.list); |
2354 ec_soe_request_init(&request.req); |
2360 ec_soe_request_init(&request.req); |
|
2361 ec_soe_request_set_drive_no(&request.req, drive_no); |
2355 ec_soe_request_set_idn(&request.req, idn); |
2362 ec_soe_request_set_idn(&request.req, idn); |
2356 |
2363 |
2357 if (ec_soe_request_alloc(&request.req, data_size)) { |
2364 if (ec_soe_request_alloc(&request.req, data_size)) { |
2358 ec_soe_request_clear(&request.req); |
2365 ec_soe_request_clear(&request.req); |
2359 return -ENOMEM; |
2366 return -ENOMEM; |
2411 } |
2418 } |
2412 |
2419 |
2413 /*****************************************************************************/ |
2420 /*****************************************************************************/ |
2414 |
2421 |
2415 int ecrt_master_read_idn(ec_master_t *master, uint16_t slave_position, |
2422 int ecrt_master_read_idn(ec_master_t *master, uint16_t slave_position, |
2416 uint16_t idn, uint8_t *target, size_t target_size, |
2423 uint8_t drive_no, uint16_t idn, uint8_t *target, size_t target_size, |
2417 size_t *result_size, uint16_t *error_code) |
2424 size_t *result_size, uint16_t *error_code) |
2418 { |
2425 { |
2419 ec_master_soe_request_t request; |
2426 ec_master_soe_request_t request; |
|
2427 |
|
2428 if (drive_no > 7) { |
|
2429 EC_MASTER_ERR(master, "Invalid drive number!\n"); |
|
2430 return -EINVAL; |
|
2431 } |
2420 |
2432 |
2421 INIT_LIST_HEAD(&request.list); |
2433 INIT_LIST_HEAD(&request.list); |
2422 ec_soe_request_init(&request.req); |
2434 ec_soe_request_init(&request.req); |
|
2435 ec_soe_request_set_drive_no(&request.req, drive_no); |
2423 ec_soe_request_set_idn(&request.req, idn); |
2436 ec_soe_request_set_idn(&request.req, idn); |
2424 ec_soe_request_read(&request.req); |
2437 ec_soe_request_read(&request.req); |
2425 |
2438 |
2426 if (down_interruptible(&master->master_sem)) |
2439 if (down_interruptible(&master->master_sem)) |
2427 return -EINTR; |
2440 return -EINTR; |