summaryrefslogtreecommitdiffstats
path: root/src/fw.c
diff options
context:
space:
mode:
authorGravatar Stefan Richter 2012-06-18 00:03:37 +0200
committerGravatar Stefan Richter 2012-06-18 00:19:23 +0200
commit56056a9607b454322759793e260e5d4db9db240e (patch)
treec023dc428c0d3ee9c62a77ce957a4cb4623561cc /src/fw.c
parentAdd raw1394_add_config_rom_descriptor() and raw1394_remove_config_rom_descrip... (diff)
Tweak raw1394_add_config_rom_descriptor() API, add documentation and test case
To conform with 'size' arguments of other libraw1394 calls, change the one in raw1394_add_config_rom_descriptor() from quadlets to bytes. This breaks runtime compatibility with potential clients that were written against B.J.'s original patch, hence reorder arguments just to break compatibility also at compile time. Change errno to ENOSYS (function not implemented) when called while running on top of raw1394. Allow &token to be NULL for convenience of clients which don't require raw1394_remove_config_rom_descriptor(). Add exhaustive documentation. Much of it is copied from the documentation of the underlying ioctl. Add example code which doubles as unit test in testlibraw. Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de>
Diffstat (limited to 'src/fw.c')
-rw-r--r--src/fw.c31
1 files changed, 15 insertions, 16 deletions
diff --git a/src/fw.c b/src/fw.c
index da275c5..877a6ad 100644
--- a/src/fw.c
+++ b/src/fw.c
@@ -1543,35 +1543,34 @@ fw_update_config_rom(fw_handle_t handle, const quadlet_t *new_rom,
}
int
-fw_add_config_rom_descriptor(fw_handle_t handle,
- const quadlet_t immediate_key,
- const quadlet_t key,
- const quadlet_t *new_rom_directory,
- size_t size,
- __u32 *out_token)
+fw_add_config_rom_descriptor(fw_handle_t handle, u_int32_t *token,
+ quadlet_t immediate_key, quadlet_t key,
+ const quadlet_t *data, size_t size)
{
struct fw_cdev_add_descriptor request;
- int retval;
+ int err;
request.immediate = immediate_key;
request.key = key;
- request.data = ptr_to_u64(new_rom_directory);
- request.length = size;
+ request.data = ptr_to_u64(data);
+ request.length = size / 4;
request.handle = 0;
- retval = ioctl(handle->local_device->fd, FW_CDEV_IOC_ADD_DESCRIPTOR,
- &request);
- if (retval < 0)
- return -1;
+ err = ioctl(handle->local_device->fd, FW_CDEV_IOC_ADD_DESCRIPTOR,
+ &request);
+ if (err)
+ return err;
+
+ if (token)
+ *token = request.handle;
- *out_token = request.handle;
return 0;
}
int
-fw_remove_config_rom_descriptor(fw_handle_t handle, __u32 token)
+fw_remove_config_rom_descriptor(fw_handle_t handle, u_int32_t token)
{
- struct fw_cdev_remove_descriptor request = {token};
+ struct fw_cdev_remove_descriptor request = {.handle = token};
return ioctl(handle->local_device->fd, FW_CDEV_IOC_REMOVE_DESCRIPTOR,
&request);