diff options
author | 2002-10-23 21:18:49 +0000 | |
---|---|---|
committer | 2002-10-23 21:18:49 +0000 | |
commit | 915a20a96f6fb81249f140a114b94f2b1502149d (patch) | |
tree | 78511c7186615b5d3473bd72f9b513ba5d9e00e1 /src/raw1394.h | |
parent | configure.ac: (diff) |
merged weihs branch
git-svn-id: svn://svn.linux1394.org/libraw1394/trunk@84 53a565d1-3bb7-0310-b661-cf11e63c67ab
Diffstat (limited to 'src/raw1394.h')
-rw-r--r-- | src/raw1394.h | 199 |
1 files changed, 199 insertions, 0 deletions
diff --git a/src/raw1394.h b/src/raw1394.h index 8d14264..c1f7b16 100644 --- a/src/raw1394.h +++ b/src/raw1394.h @@ -1,14 +1,52 @@ #ifndef _LIBRAW1394_RAW1394_H #define _LIBRAW1394_RAW1394_H +#define ARM_READ 1 +#define ARM_WRITE 2 +#define ARM_LOCK 4 + +#define RAW1394_LONG_RESET 0 +#define RAW1394_SHORT_RESET 1 + +/* busresetnotify ... */ +#define RAW1394_NOTIFY_OFF 0 +#define RAW1394_NOTIFY_ON 1 + #include <sys/types.h> +typedef u_int8_t byte_t; typedef u_int32_t quadlet_t; typedef u_int64_t octlet_t; typedef u_int64_t nodeaddr_t; typedef u_int16_t nodeid_t; +typedef u_int8_t phyid_t; +typedef u_int8_t arm_options_t; +typedef u_int16_t arm_length_t; typedef struct raw1394_handle *raw1394handle_t; +typedef struct arm_request { + nodeid_t destination_nodeid; + nodeid_t source_nodeid; + nodeaddr_t destination_offset; + u_int8_t tlabel; + u_int8_t tcode; + u_int8_t extended_transaction_code; + u_int32_t generation; + arm_length_t buffer_length; + byte_t *buffer; +} *arm_request_t; + +typedef struct arm_response { + int response_code; + arm_length_t buffer_length; + byte_t *buffer; +} *arm_response_t; + +typedef struct arm_request_response { + struct arm_request *request; + struct arm_response *response; +} *arm_request_response_t; + #ifdef __cplusplus extern "C" { #endif @@ -32,6 +70,15 @@ raw1394handle_t raw1394_new_handle(void); void raw1394_destroy_handle(raw1394handle_t handle); /* + * Switch off/on busreset-notification for handle + * return-value: + * ==0 success + * !=0 failure + * off_on_switch .... RAW1394_NOTIFY_OFF or RAW1394_NOTIFY_ON + */ +int raw1394_busreset_notify (raw1394handle_t handle, int off_on_switch); + +/* * Get the fd of this handle to select()/poll() on it. Don't try to mess around * with it any other way. Valid only after the handle got attached to a port. */ @@ -77,6 +124,15 @@ int raw1394_set_port(raw1394handle_t handle, int port); int raw1394_reset_bus(raw1394handle_t handle); /* + * Reset the connected bus (with certain type). + * return-value: + * -1 failure + * 0 success + * type .... RAW1394_SHORT_RESET or RAW1394_LONG_RESET + */ +int raw1394_reset_bus_new(raw1394handle_t handle, int type); + +/* * Get one new message through handle and process it. See below for handler * registering functions. This function will return -1 for an error or the * return value of the handler which got executed. Default handlers always @@ -120,6 +176,17 @@ tag_handler_t raw1394_set_tag_handler(raw1394handle_t handle, tag_handler_t new_h); /* + * Set the handler that will be called when an async read/write/lock arm_request + * arrived. The default action is to call the arm_callback in the + * raw1394_arm_reqhandle pointed to by arm_tag. Returns old handler. + */ +typedef int (*arm_tag_handler_t)(raw1394handle_t handle, unsigned long arm_tag, + byte_t request_type, unsigned int requested_length, + void *data); +arm_tag_handler_t raw1394_set_arm_tag_handler(raw1394handle_t handle, + arm_tag_handler_t new_h); + +/* * Set the handler that will be called when an iso packet arrives (data points * to the iso packet header). The default action is to do nothing. * @@ -159,6 +226,91 @@ struct raw1394_reqhandle { }; /* + * This is the genereal arm-request handle. (arm...address range mapping) + * It is used by the default arm-tag handler when a request has been + * received, it calls the arm_callback. + */ +typedef int (*arm_req_callback_t) (raw1394handle_t, + struct arm_request_response *arm_req_resp, + unsigned int requested_length, + void *pcontext, byte_t request_type); + +struct raw1394_arm_reqhandle { + arm_req_callback_t arm_callback; + void *pcontext; +}; + +/* + * AdressRangeMapping REGISTERING: + * start, length .... identifies addressrange + * *initial_value ... pointer to buffer containing (if necessary) initial value + * NULL means undefined + * arm_tag .......... identifier for arm_tag_handler + * (usually pointer to raw1394_arm_reqhandle) + * access_rights .... access-rights for registered addressrange handled + * by kernel-part. Value is one or more binary or of the + * following flags: ARM_READ, ARM_WRITE, ARM_LOCK + * notification_options ... identifies for which type of request you want + * to be notified. Value is one or more binary or of the + * following flags: ARM_READ, ARM_WRITE, ARM_LOCK + * client_transactions ... identifies for which type of request you want + * to handle the request by the client application. + * for those requests no response will be generated, but + * has to be generated by the application. + * Value is one or more binary or of the + * following flags: ARM_READ, ARM_WRITE, ARM_LOCK + * For each bit set here, notification_options and + * access_rights will be ignored. + * returnvalue: 0 ... success + * <0 ... failure + */ +int raw1394_arm_register(struct raw1394_handle *handle, nodeaddr_t start, + size_t length, byte_t *initial_value, + octlet_t arm_tag, arm_options_t access_rights, + arm_options_t notification_options, + arm_options_t client_transactions); +/* + * AdressRangeMapping UNREGISTERING: + * start ............ identifies addressrange for unregistering + * (value of start have to be the same value + * used for registering this adressrange) + * returnvalue: 0 ... success + * <0 ... failure + */ +int raw1394_arm_unregister(raw1394handle_t handle, nodeaddr_t start); + +/* + * send an echo request to the driver. the driver then send back the + * same request. raw1394_loop_iterate will return data as return value, + * when it processes the echo. + * + * data: arbitrary data; raw1394_loop_iterate will return it + * returnvalue: 0 .... success + * <0 ... failure + */ +int raw1394_echo_request(struct raw1394_handle *handle, quadlet_t data); + +/* + * wake up raw1394_loop_iterate (or a blocking read from the device + * file). actually this calls raw1394_echo_request with 0 as data. + * + * returnvalue: 0 .... success + * <0 ... failure + */ +int raw1394_wake_up(raw1394handle_t handle); + + +/* + * send physical request such as linkon, physicalconfigurationpacket ... etc. + * + * returnvalue: 0 .... success + * <0 ... failure + */ +int raw1394_phy_packet_write (raw1394handle_t handle, quadlet_t data); +int raw1394_start_phy_packet_write(raw1394handle_t handle, + quadlet_t data, unsigned long tag); + +/* * Passes custom tag. Use pointer to raw1394_reqhandle if you use the standard * tag handler. */ @@ -169,11 +321,30 @@ int raw1394_start_write(raw1394handle_t handle, nodeid_t node, nodeaddr_t addr, int raw1394_start_lock(raw1394handle_t handle, nodeid_t node, nodeaddr_t addr, unsigned int extcode, quadlet_t data, quadlet_t arg, quadlet_t *result, unsigned long tag); +int raw1394_start_lock64(raw1394handle_t handle, nodeid_t node, nodeaddr_t addr, + unsigned int extcode, octlet_t data, octlet_t arg, + octlet_t *result, unsigned long tag); int raw1394_start_iso_write(raw1394handle_t handle, unsigned int channel, unsigned int tag, unsigned int sy, unsigned int speed, size_t length, quadlet_t *data, unsigned long rawtag); + +/* This starts sending an arbitrary async packet. It gets an array of quadlets consisting of + header and data (without CRC in between). Header information is always in machine byte order, + data (data block as well as quadlet data in a read response for data quadlet) shall be in + big endian byte order. expect_response indicates, if we expect a response (i.e. if we will + get the tag back after the packet was sent or after a response arrived). length is the length + of the complete packet (header_length + length of the data block). + The main purpose of this function is to send responses for incoming transactions, that + are handled by the application. + Do not use that function, unless you really know, what you do! Sending corrupt packet may + lead to weird results. +*/ +int raw1394_start_async_send(raw1394handle_t handle, + size_t length, size_t header_length, unsigned int expect_response, + quadlet_t *data, unsigned long rawtag); + /* * This does the complete transaction and will return when it's finished. It * will call raw1394_loop_iterate() as often as necessary, return values of @@ -186,9 +357,15 @@ int raw1394_write(raw1394handle_t handle, nodeid_t node, nodeaddr_t addr, int raw1394_lock(raw1394handle_t handle, nodeid_t node, nodeaddr_t addr, unsigned int extcode, quadlet_t data, quadlet_t arg, quadlet_t *result); +int raw1394_lock64(raw1394handle_t handle, nodeid_t node, nodeaddr_t addr, + unsigned int extcode, octlet_t data, octlet_t arg, + octlet_t *result); int raw1394_iso_write(raw1394handle_t handle, unsigned int channel, unsigned int tag, unsigned int sy, unsigned int speed, size_t length, quadlet_t *data); +int raw1394_async_send(raw1394handle_t handle, + size_t length, size_t header_length, unsigned int expect_response, + quadlet_t *data); /* * Start and stop receiving a certain isochronous channel. You have to set an @@ -211,6 +388,28 @@ int raw1394_stop_fcp_listen(raw1394handle_t handle); */ const char *raw1394_get_libversion(void); + +/* updates the configuration rom of a host. rom_version must be the current + * version, otherwise it will fail with return value -1. + * Return value -2 indicates that the new rom version is too big. + * Return value 0 indicates success +*/ + +int raw1394_update_config_rom(raw1394handle_t handle, const quadlet_t + *new_rom, size_t size, unsigned char rom_version); + + +/* reads the current version of the configuration rom of a host. + * buffersize is the size of the buffer, rom_size + * returns the size of the current rom image.. rom_version is the + * version number of the fetched rom. + * return value -1 indicates, that the buffer was too small, + * 0 indicates success. + */ + +int raw1394_get_config_rom(raw1394handle_t handle, quadlet_t *buffer, + size_t buffersize, size_t *rom_size, unsigned char *rom_version); + #ifdef __cplusplus } #endif |