]> git.saurik.com Git - apple/xnu.git/blobdiff - bsd/netat/asp_proto.c
xnu-792.6.56.tar.gz
[apple/xnu.git] / bsd / netat / asp_proto.c
index f9e0cb956280bc904e9bc7d92741101cd1054599..79330c5427c02da1b2b370a84b9d767d7ceb91c4 100644 (file)
@@ -3,8 +3,6 @@
  *
  * @APPLE_LICENSE_HEADER_START@
  * 
- * Copyright (c) 1999-2003 Apple Computer, Inc.  All Rights Reserved.
- * 
  * 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
@@ -43,6 +41,7 @@
 #include <sys/mbuf.h>
 #include <sys/ioctl.h>
 #include <sys/malloc.h>
+#include <kern/locks.h>
 #include <sys/socket.h>
 #include <sys/socketvar.h>
 
@@ -84,11 +83,10 @@ void asp_init();
 void asp_ack_reply();
 void asp_nak_reply();
 void asp_clock();
-void asp_clock_funnel();
+void asp_clock_locked(void *);
 int  asp_open();
 int  asp_close();
 int  asp_wput();
-void atp_retry_req();
 StaticProc asp_scb_t *asp_find_scb();
 StaticProc asp_scb_t *asp_scb_alloc();
 
@@ -101,13 +99,14 @@ StaticProc void asp_timout();
 StaticProc void asp_untimout();
 StaticProc void asp_hangup();
 StaticProc void asp_send_tickle();
-StaticProc void asp_send_tickle_funnel();
+StaticProc void asp_send_tickle_locked(void *);
 StaticProc void asp_accept();
 StaticProc int  asp_send_req();
 
 extern at_ifaddr_t *ifID_home;
 extern int atp_pidM[];
 extern gref_t *atp_inputQ[];
+extern lck_mtx_t *atalk_mutex;
 gbuf_t *scb_resource_m = 0;
 unsigned char asp_inpC[256];
 asp_scb_t *asp_scbQ[256];
@@ -269,7 +268,7 @@ asp_close(gref)
         */
        scb->tmo_cnt = 0;
        asp_untimout(asp_hangup, scb);
-       untimeout(asp_send_tickle_funnel, (void *)scb); /* added for 2225395 */
+       untimeout(asp_send_tickle_locked, (void *)scb); /* added for 2225395 */
 
        /*
         * free the asp session control block
@@ -374,7 +373,7 @@ void trace_end(str)
        dPrintf(D_M_ASP, D_L_TRACE,
                ("  %s: %s\n", str, mbuf_totals()));
 }
-#endif AT_MBUF_TRACE
+#endif /* AT_MBUF_TRACE */
 
 /*
  * the write routine
@@ -497,7 +496,7 @@ int asp_wput(gref, m)
 
        case ASPIOC_GetLocEntity:
                if ((gbuf_cont(mioc) == 0) || (scb->atp_state == 0)) {
-                       asp_iocnak(gref, mioc, EPROTO);
+                       asp_iocnak(gref, mioc, EPROTOTYPE);
                        return 0;
                }
                *(at_inet_t *)gbuf_rptr(gbuf_cont(mioc)) = scb->loc_addr;
@@ -505,7 +504,7 @@ int asp_wput(gref, m)
 
        case ASPIOC_GetRemEntity:
                if ((gbuf_cont(mioc) == 0) || (scb->atp_state == 0)) {
-                       asp_iocnak(gref, mioc, EPROTO);
+                       asp_iocnak(gref, mioc, EPROTOTYPE);
                        return 0;
                }
                *(at_inet_t *)gbuf_rptr(gbuf_cont(mioc)) = scb->rem_addr;
@@ -513,7 +512,7 @@ int asp_wput(gref, m)
 
        case ASPIOC_GetSession:
                if ((mdata = gbuf_cont(mioc)) == 0) {
-                       asp_iocnak(gref, mioc, EPROTO);
+                       asp_iocnak(gref, mioc, EPROTOTYPE);
                        return 0;
                }
                addr = (at_inet_t *)gbuf_rptr(mdata);
@@ -522,11 +521,11 @@ int asp_wput(gref, m)
                server_scb = asp_scbQ[addr->socket];
 /*### LD 10/28/97: changed to make sure we're not accessing a null server_scb */
                if (server_scb == 0) {
-                       asp_iocnak(gref, mioc, EPROTO);
+                       asp_iocnak(gref, mioc, EPROTOTYPE);
                        return 0;
                }
                if (server_scb->sess_ioc == 0) {
-                       asp_iocnak(gref, mioc, EPROTO);
+                       asp_iocnak(gref, mioc, EPROTOTYPE);
                        return 0;
                }
 
@@ -662,7 +661,7 @@ int asp_wput(gref, m)
                {
                struct atp_state *atp = (struct atp_state *)gref->info;
                if (atp->dflag)
-                       atp = atp->atp_msgq;
+                       atp = (struct atp_state *)atp->atp_msgq;
                                        
                if (gbuf_cont(mioc) == 0) {
                        asp_iocnak(gref, mioc, EINVAL);
@@ -778,15 +777,15 @@ asp_send_req(gref, mioc, dest, retry, awp, xo, state, bitmap)
 }
 
 /*
- * send tickle routine - funnelled version
+ * send tickle routine - locked version
  */
 StaticProc void
-asp_send_tickle_funnel(scb)
-       asp_scb_t *scb;
+asp_send_tickle_locked(scb)
+       void *scb;
 {
-        thread_funnel_set(network_flock, TRUE);
-       asp_send_tickle(scb);
-        thread_funnel_set(network_flock, FALSE);
+       atalk_lock();
+       asp_send_tickle((asp_scb_t *)scb);
+       atalk_unlock();
 }
 
 
@@ -814,7 +813,7 @@ asp_send_tickle(scb)
                dPrintf(D_M_ASP, D_L_WARNING,
                ("asp_send_tickle: ENOBUFS 0, loc=%d, rem=%d\n",
                        scb->loc_addr.socket,scb->rem_addr.socket));
-               timeout(asp_send_tickle_funnel, (void *)scb, 10);
+               timeout(asp_send_tickle_locked, (void *)scb, 10);
                return;
        }
        gbuf_wset(mioc,sizeof(ioc_t));
@@ -836,7 +835,7 @@ asp_send_tickle(scb)
                        ("asp_send_tickle: ENOBUFS 1, loc=%d, rem=%d\n",
                         scb->loc_addr.socket,scb->rem_addr.socket));
 
-               timeout(asp_send_tickle_funnel, (void *)scb, 10);
+               timeout(asp_send_tickle_locked, (void *)scb, 10);
                return;
        }
 }
@@ -897,14 +896,14 @@ asp_accept(scb, sess_scb, m)
 } /* asp_accept */
 
 /*
- * timer routine - funneled version
+ * timer routine - locked version
  */
-void asp_clock_funnel(arg)
+void asp_clock_locked(arg)
        void *arg;
 {
-        thread_funnel_set(network_flock, TRUE);
+       atalk_lock();
        asp_clock(arg);
-        thread_funnel_set(network_flock, FALSE);
+       atalk_unlock();
 }
 
 /*
@@ -933,7 +932,7 @@ void asp_clock(arg)
        ATENABLE(s, asptmo_lock);
 
        if (++scb_tmo_cnt == 0) scb_tmo_cnt++;
-       timeout(asp_clock_funnel, (void *)arg, (1<<SESS_TMO_RES)*TICKS_PER_SEC);
+       timeout(asp_clock_locked, (void *)arg, (1<<SESS_TMO_RES)*TICKS_PER_SEC);
         
 }
 
@@ -1524,7 +1523,7 @@ asp_nak_reply(gref, mioc)
 
                        /* last remaining use of MSG_ERROR */
                        gbuf_set_type(mioc, MSG_ERROR);
-                       *gbuf_rptr(mioc) = (u_char)EPROTO;
+                       *gbuf_rptr(mioc) = (u_char)EPROTOTYPE;
                        gbuf_wset(mioc, 1);
                        if (gbuf_cont(mioc)) {
                                gbuf_freem(gbuf_cont(mioc));
@@ -1957,9 +1956,9 @@ int ASPputmsg(gref_t *gref, strbuf_t *ctlptr, strbuf_t *datptr, gbuf_t *mreq, in
         bcopy (datptr, &datbuf, sizeof (strbuf_t));
      } else {
         /* being called from user space */
-        if ((err = copyin((caddr_t)ctlptr, (caddr_t)&ctlbuf, sizeof(ctlbuf))) != 0)
+        if ((err = copyin(CAST_USER_ADDR_T(ctlptr), (caddr_t)&ctlbuf, sizeof(ctlbuf))) != 0)
             goto l_err;
-        if ((err = copyin((caddr_t)datptr, (caddr_t)&datbuf, sizeof(datbuf))) != 0)
+        if ((err = copyin(CAST_USER_ADDR_T(datptr), (caddr_t)&datbuf, sizeof(datbuf))) != 0)
             goto l_err;
      }
 
@@ -1979,7 +1978,7 @@ int ASPputmsg(gref_t *gref, strbuf_t *ctlptr, strbuf_t *datptr, gbuf_t *mreq, in
         bcopy (ctlbuf.buf, gbuf_rptr(mioc), ctlbuf.len);
     } else {
         /* being called from user space */
-        if ((err = copyin((caddr_t)ctlbuf.buf, (caddr_t)gbuf_rptr(mioc), ctlbuf.len)) != 0) {
+        if ((err = copyin(CAST_USER_ADDR_T(ctlbuf.buf), (caddr_t)gbuf_rptr(mioc), ctlbuf.len)) != 0) {
             gbuf_freem(mioc);
             goto l_err;
         }
@@ -2032,7 +2031,7 @@ int ASPputmsg(gref_t *gref, strbuf_t *ctlptr, strbuf_t *datptr, gbuf_t *mreq, in
                remain -= copy_len;
                if (mreq != NULL)
                        bcopy (dataptr, (gbuf_rptr(mdata) + offset), copy_len);
-               else if ((err = copyin(dataptr, (caddr_t)(gbuf_rptr(mdata) + offset), copy_len)) != 0) {
+               else if ((err = copyin(CAST_USER_ADDR_T(dataptr), (caddr_t)(gbuf_rptr(mdata) + offset), copy_len)) != 0) {
                        gbuf_freem(mioc);
                        goto l_err;
                }
@@ -2244,7 +2243,8 @@ int ASPgetmsg(gref_t *gref, strbuf_t *ctlptr, strbuf_t *datptr, gbuf_t **mreply,
      */
     while ((mproto = scb->sess_ioc) == 0) {
         scb->get_wait = 1;
-        err = tsleep(&scb->event, PSOCK | PCATCH, "aspgetmsg", 0);
+          lck_mtx_assert(atalk_mutex, LCK_MTX_ASSERT_OWNED);
+        err = msleep(&scb->event, atalk_mutex, PSOCK | PCATCH, "aspgetmsg", 0);
         if (err != 0) {
             scb->get_wait = 0;
             ATENABLE(s, scb->lock);
@@ -2282,10 +2282,10 @@ int ASPgetmsg(gref_t *gref, strbuf_t *ctlptr, strbuf_t *datptr, gbuf_t **mreply,
         bcopy (datptr, &datbuf, sizeof(datbuf));
     } else {
         /* called from user space */
-        if ((err = copyin((caddr_t)ctlptr,
+        if ((err = copyin(CAST_USER_ADDR_T(ctlptr),
                 (caddr_t)&ctlbuf, sizeof(ctlbuf))) != 0)
             goto l_err;
-        if ((err = copyin((caddr_t)datptr,
+        if ((err = copyin(CAST_USER_ADDR_T(datptr),
                 (caddr_t)&datbuf, sizeof(datbuf))) != 0)
             goto l_err;
     }
@@ -2324,10 +2324,10 @@ int ASPgetmsg(gref_t *gref, strbuf_t *ctlptr, strbuf_t *datptr, gbuf_t **mreply,
     } else {
         /* called from user space */
         if ((err = copyout((caddr_t)gbuf_rptr(mproto),
-                (caddr_t)ctlbuf.buf, ctlbuf.len)) != 0)
+                CAST_USER_ADDR_T(ctlbuf.buf), ctlbuf.len)) != 0)
             goto l_err;
         if ((err = copyout((caddr_t)&ctlbuf,
-                (caddr_t)ctlptr, sizeof(ctlbuf))) != 0)
+                CAST_USER_ADDR_T(ctlptr), sizeof(ctlbuf))) != 0)
             goto l_err;
     }
 
@@ -2345,7 +2345,7 @@ int ASPgetmsg(gref_t *gref, strbuf_t *ctlptr, strbuf_t *datptr, gbuf_t **mreply,
             
             if (mreply == NULL) {
                 /* called from user space */
-                if ((err = copyout((caddr_t)gbuf_rptr(mdata), (caddr_t)&datbuf.buf[sum], len)) != 0)
+                if ((err = copyout((caddr_t)gbuf_rptr(mdata), CAST_USER_ADDR_T(&datbuf.buf[sum]), len)) != 0)
                     goto l_err;
             }
             sum += len;
@@ -2357,7 +2357,7 @@ int ASPgetmsg(gref_t *gref, strbuf_t *ctlptr, strbuf_t *datptr, gbuf_t **mreply,
         bcopy (&datbuf, datptr, sizeof(datbuf));
     } else {
         /* called from user space */
-        if ((err = copyout((caddr_t)&datbuf, (caddr_t)datptr, sizeof(datbuf))) != 0)
+        if ((err = copyout((caddr_t)&datbuf, CAST_USER_ADDR_T(datptr), sizeof(datbuf))) != 0)
             goto l_err;
     }