]> git.saurik.com Git - apple/xnu.git/blobdiff - bsd/netat/adsp_Control.c
xnu-792.24.17.tar.gz
[apple/xnu.git] / bsd / netat / adsp_Control.c
index 3bc19f8467444f54c05c91a287263a21620b0c05..fe9d6803a2d4833c1dca643495806611b238b04f 100644 (file)
@@ -1,29 +1,23 @@
 /*
  * Copyright (c) 2000 Apple Computer, Inc. All rights reserved.
  *
- * @APPLE_OSREFERENCE_LICENSE_HEADER_START@
+ * @APPLE_LICENSE_HEADER_START@
  * 
- * This file contains Original Code and/or Modifications of Original Code
- * as defined in and that are subject to the Apple Public Source License
- * Version 2.0 (the 'License'). You may not use this file except in
- * compliance with the License. The rights granted to you under the License
- * may not be used to create, or enable the creation or redistribution of,
- * unlawful or unlicensed copies of an Apple operating system, or to
- * circumvent, violate, or enable the circumvention or violation of, any
- * terms of an Apple operating system software license agreement.
+ * The contents of this file constitute Original Code as defined in and
+ * are subject to the Apple Public Source License Version 1.1 (the
+ * "License").  You may not use this file except in compliance with the
+ * License.  Please obtain a copy of the License at
+ * http://www.apple.com/publicsource and read it before using this file.
  * 
- * Please obtain a copy of the License at
- * http://www.opensource.apple.com/apsl/ and read it before using this file.
- * 
- * The Original Code and all software distributed under the License are
- * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
+ * This Original Code and all software distributed under the License are
+ * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
  * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
  * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
- * Please see the License for the specific language governing rights and
- * limitations under the License.
+ * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT.  Please see the
+ * License for the specific language governing rights and limitations
+ * under the License.
  * 
- * @APPLE_OSREFERENCE_LICENSE_HEADER_END@
+ * @APPLE_LICENSE_HEADER_END@
  */
 /*
  *     Copyright (c) 1990, 1995-1998 Apple Computer, Inc.
@@ -135,6 +129,7 @@ void CheckSend(sp)          /* (CCBPtr sp) */
 {
     int i;
     int        attnMsg;                /* True if attention message */
+    int        s;
     register gbuf_t *mp;       /* send message block */
 #ifdef notdef
     register gbuf_t *tmp;
@@ -160,6 +155,7 @@ top:
                gbuf_freel(mlist);
        return;         /* can't get buffers... do nothing! */
     }
+    ATDISABLE(s, sp->lock);
     sp->callSend = 0;          /* Clear flag */
     use_attention_code = 0;
     len = 0;
@@ -180,24 +176,24 @@ top:
 
            /* point past ADSP header (no attention) */
            dp = ((char *) gbuf_wptr(mp)) + ADSP_FRAME_LEN; 
-           UAL_ASSIGN_HTON(sp->f.pktFirstByteSeq, sp->firstRtmtSeq);
+           UAL_ASSIGN(sp->f.pktFirstByteSeq, netdw(sp->firstRtmtSeq));
            
-           UAS_ASSIGN_HTON(sp->of.version, netw(0x0100)); /* Fill in open connection parms */
-           UAS_ASSIGN_HTON(sp->of.dstCID, sp->remCID); /* Destination CID */
-           UAL_ASSIGN_HTON(sp->of.pktAttnRecvSeq, sp->attnRecvSeq);
+           UAS_ASSIGN(sp->of.version, netw(0x0100)); /* Fill in open connection parms */
+           UAS_ASSIGN(sp->of.dstCID, sp->remCID);      /* Destination CID */
+           UAL_ASSIGN(sp->of.pktAttnRecvSeq, netdw(sp->attnRecvSeq));
            bcopy((caddr_t) &sp->of, (caddr_t) dp, ADSP_OPEN_FRAME_LEN);
            len += ADSP_OPEN_FRAME_LEN;
 
            if (i & B_CTL_OREQ) {
-               UAS_ASSIGN_HTON(sp->f.CID, sp->locCID);
+               UAS_ASSIGN(sp->f.CID, sp->locCID);
                mask = B_CTL_OREQ;
                sp->f.descriptor = ADSP_CONTROL_BIT | ADSP_CTL_OREQ;
            } else if (i & B_CTL_OACK) {
-               UAS_ASSIGN_HTON(sp->f.CID, sp->locCID);
+               UAS_ASSIGN(sp->f.CID, sp->locCID);
                mask = B_CTL_OACK;
                sp->f.descriptor = ADSP_CONTROL_BIT | ADSP_CTL_OACK;
            } else if (i & B_CTL_OREQACK) {
-               UAS_ASSIGN_HTON(sp->f.CID, sp->locCID);
+               UAS_ASSIGN(sp->f.CID, sp->locCID);
                mask = B_CTL_OREQACK;
                sp->f.descriptor = ADSP_CONTROL_BIT | ADSP_CTL_OREQACK;
            } else              /* Deny */
@@ -223,7 +219,7 @@ top:
            }
        } else {
            /* seq # of next byte to send */
-           UAL_ASSIGN_HTON(sp->f.pktFirstByteSeq, sp->sendSeq);        
+           UAL_ASSIGN(sp->f.pktFirstByteSeq, netdw(sp->sendSeq));      
                        
            if (i & B_CTL_CLOSE) {
                sp->state = sClosed; /* Now we're closed */
@@ -302,7 +298,7 @@ top:
     }
 
     if (sp->sendDataAck) {
-       UAL_ASSIGN_HTON(sp->f.pktFirstByteSeq, sp->sendSeq); /* seq # of next byte */
+       UAL_ASSIGN(sp->f.pktFirstByteSeq, netdw(sp->sendSeq)); /* seq # of next byte */
        attnMsg = 0;
        sp->f.descriptor = ADSP_CONTROL_BIT;
        goto sendit;
@@ -313,6 +309,7 @@ top:
      */
     if (mp)
        gbuf_freem(mp);
+    ATENABLE(s, sp->lock);
     if (mlist)
        adsp_sendddp(sp, mlist, 0, &sp->remoteAddress, DDP_ADSP);
     return;
@@ -320,13 +317,13 @@ top:
 sendit:
 
     if (attnMsg) {
-       UAL_ASSIGN_HTON(sp->f.pktFirstByteSeq, sp->attnSendSeq);
-       UAL_ASSIGN_HTON(sp->f.pktNextRecvSeq, sp->attnRecvSeq);
+       UAL_ASSIGN(sp->f.pktFirstByteSeq, netdw(sp->attnSendSeq));
+       UAL_ASSIGN(sp->f.pktNextRecvSeq, netdw(sp->attnRecvSeq));
        UAS_ASSIGN(sp->f.pktRecvWdw, 0);        /* Always zero in attn pkt */
     } else {
        sp->sendDataAck = 0;
-       UAL_ASSIGN_HTON(sp->f.pktNextRecvSeq, sp->recvSeq);
-       UAS_ASSIGN_HTON(sp->f.pktRecvWdw, CalcRecvWdw(sp));
+       UAL_ASSIGN(sp->f.pktNextRecvSeq, netdw(sp->recvSeq));
+       UAS_ASSIGN(sp->f.pktRecvWdw, netw(CalcRecvWdw(sp)));
     }
     if (use_attention_code) {
        bcopy((caddr_t) &sp->f, (caddr_t) gbuf_wptr(mp), ADSP_FRAME_LEN + 2);
@@ -344,10 +341,12 @@ sendit:
 
     if (sp->state == sClosed) {        /* must have sent a close advice */
                                /* send header + data */
+       ATENABLE(s, sp->lock);
        adsp_sendddp(sp, mlist, 0, &sp->remoteAddress, DDP_ADSP);
        DoClose(sp, 0, -1);     /* complete close! */
        return;
     }
+    ATENABLE(s, sp->lock);
     if (sp->state == sClosing) /* See if we were waiting on this write */
        CheckOkToClose(sp);
     goto top;
@@ -402,7 +401,7 @@ attachData(sp, mp)
      * The easiest fix to this timing dilemma seems to be to reset 
      * sendSeq to first Rtmt Seq if we're sending the first packet.
      */
-    UAL_ASSIGN_HTON(sp->f.pktFirstByteSeq, sp->sendSeq);
+    UAL_ASSIGN(sp->f.pktFirstByteSeq, netdw(sp->sendSeq));
                
     if (smp = sp->sbuf_mb) /* Get oldest header */
        eom = 1;