Changeset 646849b3 in mainline for uspace/drv/block/isa-ide/main.c
- Timestamp:
- 2024-05-17T12:25:26Z (10 months ago)
- Branches:
- master
- Children:
- 60744cb
- Parents:
- 59c0f478
- git-author:
- Jiri Svoboda <jiri@…> (2024-05-16 19:25:07)
- git-committer:
- Jiri Svoboda <jiri@…> (2024-05-17 12:25:26)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/drv/block/isa-ide/main.c
r59c0f478 r646849b3 81 81 return rc; 82 82 83 if (hw_res.io_ranges.count != 2) {83 if (hw_res.io_ranges.count != 4) { 84 84 rc = EINVAL; 85 85 goto error; … … 88 88 /* I/O ranges */ 89 89 90 addr_range_t *cmd_rng = &hw_res.io_ranges.ranges[0]; 91 addr_range_t *ctl_rng = &hw_res.io_ranges.ranges[1]; 92 ata_res->cmd = RNGABS(*cmd_rng); 93 ata_res->ctl = RNGABS(*ctl_rng); 94 95 if (RNGSZ(*ctl_rng) < sizeof(ata_ctl_t)) { 96 rc = EINVAL; 97 goto error; 98 } 99 100 if (RNGSZ(*cmd_rng) < sizeof(ata_cmd_t)) { 90 addr_range_t *cmd1_rng = &hw_res.io_ranges.ranges[0]; 91 addr_range_t *ctl1_rng = &hw_res.io_ranges.ranges[1]; 92 addr_range_t *cmd2_rng = &hw_res.io_ranges.ranges[2]; 93 addr_range_t *ctl2_rng = &hw_res.io_ranges.ranges[3]; 94 ata_res->cmd1 = RNGABS(*cmd1_rng); 95 ata_res->ctl1 = RNGABS(*ctl1_rng); 96 ata_res->cmd2 = RNGABS(*cmd2_rng); 97 ata_res->ctl2 = RNGABS(*ctl2_rng); 98 99 if (RNGSZ(*ctl1_rng) < sizeof(ata_ctl_t)) { 100 rc = EINVAL; 101 goto error; 102 } 103 104 if (RNGSZ(*cmd1_rng) < sizeof(ata_cmd_t)) { 105 rc = EINVAL; 106 goto error; 107 } 108 109 if (RNGSZ(*ctl2_rng) < sizeof(ata_ctl_t)) { 110 rc = EINVAL; 111 goto error; 112 } 113 114 if (RNGSZ(*cmd2_rng) < sizeof(ata_cmd_t)) { 101 115 rc = EINVAL; 102 116 goto error; … … 105 119 /* IRQ */ 106 120 if (hw_res.irqs.count > 0) { 107 ata_res->irq = hw_res.irqs.irqs[0];121 ata_res->irq1 = hw_res.irqs.irqs[0]; 108 122 } else { 109 ata_res->irq = -1; 123 ata_res->irq1 = -1; 124 } 125 126 if (hw_res.irqs.count > 1) { 127 ata_res->irq2 = hw_res.irqs.irqs[1]; 128 } else { 129 ata_res->irq2 = -1; 110 130 } 111 131 … … 142 162 ctrl->dev = dev; 143 163 144 rc = isa_ide_ctrl_init(ctrl, &res); 164 rc = isa_ide_channel_init(ctrl, &ctrl->channel[0], 0, &res); 165 if (rc == ENOENT) 166 goto error; 167 168 rc = isa_ide_channel_init(ctrl, &ctrl->channel[1], 1, &res); 145 169 if (rc == ENOENT) 146 170 goto error; … … 157 181 } 158 182 159 static char *isa_ide_fun_name( unsigned idx)183 static char *isa_ide_fun_name(isa_ide_channel_t *chan, unsigned idx) 160 184 { 161 185 char *fun_name; 162 186 163 if (asprintf(&fun_name, " d%u", idx) < 0)187 if (asprintf(&fun_name, "c%ud%u", chan->chan_id, idx) < 0) 164 188 return NULL; 165 189 … … 167 191 } 168 192 169 errno_t isa_ide_fun_create(isa_ide_c trl_t *ctrl, unsigned idx, void *charg)193 errno_t isa_ide_fun_create(isa_ide_channel_t *chan, unsigned idx, void *charg) 170 194 { 171 195 errno_t rc; … … 175 199 bool bound = false; 176 200 177 fun_name = isa_ide_fun_name( idx);201 fun_name = isa_ide_fun_name(chan, idx); 178 202 if (fun_name == NULL) { 179 203 ddf_msg(LVL_ERROR, "Out of memory."); … … 182 206 } 183 207 184 fun = ddf_fun_create(c trl->dev, fun_exposed, fun_name);208 fun = ddf_fun_create(chan->ctrl->dev, fun_exposed, fun_name); 185 209 if (fun == NULL) { 186 210 ddf_msg(LVL_ERROR, "Failed creating DDF function."); … … 232 256 } 233 257 234 errno_t isa_ide_fun_remove(isa_ide_c trl_t *ctrl, unsigned idx)258 errno_t isa_ide_fun_remove(isa_ide_channel_t *chan, unsigned idx) 235 259 { 236 260 errno_t rc; 237 261 char *fun_name; 238 isa_ide_fun_t *ifun = c trl->fun[idx];239 240 fun_name = isa_ide_fun_name( idx);262 isa_ide_fun_t *ifun = chan->fun[idx]; 263 264 fun_name = isa_ide_fun_name(chan, idx); 241 265 if (fun_name == NULL) { 242 266 ddf_msg(LVL_ERROR, "Out of memory."); … … 267 291 } 268 292 269 errno_t isa_ide_fun_unbind(isa_ide_c trl_t *ctrl, unsigned idx)293 errno_t isa_ide_fun_unbind(isa_ide_channel_t *chan, unsigned idx) 270 294 { 271 295 errno_t rc; 272 296 char *fun_name; 273 isa_ide_fun_t *ifun = c trl->fun[idx];274 275 fun_name = isa_ide_fun_name( idx);297 isa_ide_fun_t *ifun = chan->fun[idx]; 298 299 fun_name = isa_ide_fun_name(chan, idx); 276 300 if (fun_name == NULL) { 277 301 ddf_msg(LVL_ERROR, "Out of memory."); … … 299 323 { 300 324 isa_ide_ctrl_t *ctrl = (isa_ide_ctrl_t *)ddf_dev_data_get(dev); 325 errno_t rc; 301 326 302 327 ddf_msg(LVL_DEBUG, "isa_ide_dev_remove(%p)", dev); 303 328 304 return isa_ide_ctrl_remove(ctrl); 329 rc = isa_ide_channel_fini(&ctrl->channel[0]); 330 if (rc != EOK) 331 return rc; 332 333 rc = isa_ide_channel_fini(&ctrl->channel[1]); 334 if (rc != EOK) 335 return rc; 336 337 return EOK; 305 338 } 306 339 … … 308 341 { 309 342 isa_ide_ctrl_t *ctrl = (isa_ide_ctrl_t *)ddf_dev_data_get(dev); 343 errno_t rc; 310 344 311 345 ddf_msg(LVL_DEBUG, "isa_ide_dev_gone(%p)", dev); 312 346 313 return isa_ide_ctrl_gone(ctrl); 347 rc = isa_ide_channel_fini(&ctrl->channel[0]); 348 if (rc != EOK) 349 return rc; 350 351 rc = isa_ide_channel_fini(&ctrl->channel[1]); 352 if (rc != EOK) 353 return rc; 354 355 return EOK; 314 356 } 315 357
Note:
See TracChangeset
for help on using the changeset viewer.