summaryrefslogtreecommitdiffstats
path: root/sysutils/hal/files/patch-hald_freebsd_libprobe_hfp-cdrom.c
blob: 5fad5f5b46bb09964ebe1d014725c7bb44deef8c (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
--- hald/freebsd/libprobe/hfp-cdrom.c   7 May 2006 00:27:55 -0000   1.4
+++ hald/freebsd/libprobe/hfp-cdrom.c   2 Jul 2006 05:08:24 -0000   1.6
@@ -112,6 +112,7 @@
 
   if (cdrom->fd >= 0)      /* ATAPI transport */
     {
+#ifdef IOCATAREQUEST
       struct ata_ioc_request req;
 
       memset(&req, 0, sizeof(req));
@@ -140,6 +141,38 @@
        *err = hfp_strdup_printf("ATAPI error %i", req.error);
      return FALSE;
    }
+#else
+      struct ata_cmd iocmd;
+
+      memset(&iocmd, 0, sizeof(iocmd));
+      iocmd.u.request.flags = ATA_CMD_ATAPI;
+      iocmd.u.request.timeout = timeout;
+      iocmd.cmd = ATAREQUEST;
+      iocmd.device = -1;
+      memcpy(iocmd.u.request.u.atapi.ccb, ccb, 16);
+
+      if (data)
+        {
+     static int atapi_direction[] = { 0, ATA_CMD_READ, ATA_CMD_WRITE };
+
+     iocmd.u.request.flags |= atapi_direction[direction];
+     iocmd.u.request.data = data;
+     iocmd.u.request.count = len;
+   }
+
+      if (ioctl(cdrom->fd, IOCATA, &iocmd) < 0)
+        {
+     if (err)
+       *err = hfp_strdup_printf("IOCATA failure: %s", strerror(errno));
+     return FALSE;
+   }
+      if (iocmd.u.request.error != 0)
+        {
+     if (err)
+       *err = hfp_strdup_printf("ATAPI error %i", iocmd.u.request.error);
+     return FALSE;
+   }
+#endif
     }
   else             /* SCSI transport */
     {