summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar abombe 2000-02-06 15:10:14 +0000
committerGravatar abombe 2000-02-06 15:10:14 +0000
commitc4d75933cb2a8e3fcd396ea78b869a2f2c6b4234 (patch)
tree5ce2dd854c63db68cf6f7c534aab625912a161af
parentChanged iso rcv handling to separate handlers per channel. (diff)
Added lock transaction.
git-svn-id: svn://svn.linux1394.org/libraw1394/trunk@7 53a565d1-3bb7-0310-b661-cf11e63c67ab
Diffstat (limited to '')
-rw-r--r--src/raw1394.h5
-rw-r--r--src/readwrite.c48
2 files changed, 53 insertions, 0 deletions
diff --git a/src/raw1394.h b/src/raw1394.h
index 9cf4c34..57dee74 100644
--- a/src/raw1394.h
+++ b/src/raw1394.h
@@ -123,6 +123,9 @@ int raw1394_start_read(raw1394handle_t handle, nodeid_t node, nodeaddr_t addr,
size_t length, quadlet_t *buffer, unsigned long tag);
int raw1394_start_write(raw1394handle_t handle, nodeid_t node, nodeaddr_t addr,
size_t length, quadlet_t *data, unsigned long tag);
+int raw1394_start_lock(struct raw1394_handle *handle, nodeid_t node,
+ nodeaddr_t addr, unsigned int extcode, quadlet_t data,
+ quadlet_t arg, unsigned long tag);
/*
* This does the complete transaction and will return when it's finished. It
@@ -133,6 +136,8 @@ int raw1394_read(raw1394handle_t handle, nodeid_t node, nodeaddr_t addr,
size_t length, quadlet_t *buffer);
int raw1394_write(raw1394handle_t handle, nodeid_t node, nodeaddr_t addr,
size_t length, quadlet_t *data);
+int raw1394_lock(struct raw1394_handle *handle, nodeid_t node, nodeaddr_t addr,
+ unsigned int extcode, quadlet_t data, quadlet_t arg);
/*
* Start and stop receiving a certain isochronous channel. You have to set an
diff --git a/src/readwrite.c b/src/readwrite.c
index 192b0a1..9e01d39 100644
--- a/src/readwrite.c
+++ b/src/readwrite.c
@@ -1,5 +1,6 @@
#include <unistd.h>
+#include <errno.h>
#include "raw1394.h"
#include "kernel-raw1394.h"
@@ -44,6 +45,42 @@ int raw1394_start_write(struct raw1394_handle *handle, nodeid_t node,
return (int)write(handle->fd, req, sizeof(*req));
}
+int raw1394_start_lock(struct raw1394_handle *handle, nodeid_t node,
+ nodeaddr_t addr, unsigned int extcode, quadlet_t data,
+ quadlet_t arg, unsigned long tag)
+{
+ struct raw1394_request *req = &handle->req;
+ quadlet_t sendbuf[2];
+
+ if ((extcode > 7) || (extcode == 0)) {
+ errno = EINVAL;
+ return -1;
+ }
+
+ CLEAR_REQ(req);
+
+ req->type = RAW1394_REQ_LOCK;
+ req->generation = handle->generation;
+ req->tag = tag;
+
+ req->address = ((u_int64_t)node << 48) | addr;
+ req->sendb = sendbuf;
+
+ switch (extcode) {
+ case 3: /* EXTCODE_FETCH_ADD */
+ case 4: /* EXTCODE_LITTLE_ADD */
+ sendbuf[0] = data;
+ req->length = 4;
+ break;
+ default:
+ sendbuf[0] = arg;
+ sendbuf[1] = data;
+ req->length = 8;
+ break;
+ }
+
+ return (int)write(handle->fd, req, sizeof(*req));
+}
#define SYNCFUNC_VARS \
@@ -81,5 +118,16 @@ int raw1394_write(struct raw1394_handle *handle, nodeid_t node, nodeaddr_t addr,
SYNCFUNC_BODY;
}
+int raw1394_lock(struct raw1394_handle *handle, nodeid_t node, nodeaddr_t addr,
+ unsigned int extcode, quadlet_t data, quadlet_t arg)
+{
+ SYNCFUNC_VARS;
+
+ err = raw1394_start_lock(handle, node, addr, extcode, data, arg,
+ (unsigned long)&rh);
+
+ SYNCFUNC_BODY;
+}
+
#undef SYNCFUNC_VARS
#undef SYNCFUNC_BODY
y seem needed. The NEWS file gives a good overview, andGravatar bencollins 1-4/+0 2003-07-13Fix compiler warnings.Gravatar bencollins 4-12/+22 2003-07-13Updates from 0.10.0 release.Gravatar bencollins 4-5/+14 2003-04-23add libtoolize to bootstrapGravatar ddennedy 1-1/+10 2003-04-21added Dan Maas' rawiso docsGravatar ddennedy 1-32/+295 2003-04-07new_handle_on_port() error path fix from Jim RadfordGravatar dmaas 1-1/+3 2003-03-26add raw1394_new_handle_on_port() convenience functionGravatar dmaas 2-1/+41 2003-02-22Updates for new rawiso ioctl interface.Gravatar bencollins 3-37/+125 2003-01-15add iso_xmit_sync() and iso_xmit_write(); clean up iso handling a bitGravatar dmaas 5-39/+161 2003-01-15implement tag matching for rawiso receptionGravatar dmaas 3-4/+12 2003-01-06back out previous commit - don't drop the legacy API just yetGravatar dmaas 6-173/+130 2003-01-05emulate legacy ISO reception API on top of new rawiso APIGravatar dmaas 7-131/+174 2002-12-24update iso API for multi-channel reception and new packet buffer layoutGravatar dmaas 4-123/+236 2002-12-20oops, irq_interval needs to be signedGravatar anonymous 1-1/+1 2002-12-20dmaas - renamed exported arm definitions into the raw1394_ namespace; brought...Gravatar anonymous 3-124/+48 2002-12-16rawiso updates:Gravatar dmaas 3-18/+25 2002-11-18fix cplusplus extern C blockGravatar ddennedy 1-4/+4 2002-11-18merged rawiso branchGravatar ddennedy 7-6/+488