Esempio n. 1
0
// allocate memory for interrupt delivery channel structure and initialize.
// returns NULL on memory exhausted.
static irq_chan* ich_ctor(File* file, int sig, int flags)
{
	register irq_chan* ich;

	assert_retval(irq_file(file) < NR_IRQS, NULL);

	ich=kmalloc(sizeof(irq_chan), GFP_KERNEL);

	if (ich!=NULL)
	{
#ifndef NDEBUG
		ich->signature=ICH_SIG;
#endif

		ich->file=file;
		file->private_data = ich;
		ich->irq=irq_file(file);
		ich->tch=NULL;
		ich->sig=sig;
		ich->flags=flags;
		ich->devname=NULL;

		init_waitqueue_head(&ich->wqh);

		ich->irq_count=0;
		ich->sig_count=0;
		ich->sel_count=0;
		ich->skipping_count=0;
	}

	PREFIX(); PRDEBUG("ich=%p ich=", ich); ICH_PRINT(ich); PRENDL();
	return ich;
}
Esempio n. 2
0
static int irq_open(Inode* inode, File* file)
{
	PREFIX(); PFX(irq_inode(inode)); PRDEBUG("opening by %d...\n",
		current->pid);

	if (irq_inode(inode)>=NR_IRQS && irq_inode(inode)!=PCI_MINOR)
		return -ENXIO;
#if 0
	if (file->f_flags & ~O_ACCMODE)
		return -EINVAL;
#endif
	file->private_data=NULL;

	MOD_INC_USE_COUNT;
	PREFIX(); PFX(irq_inode(inode)); PRDEBUG("opened by %d\n", current->pid);
	PREFIX(); TCHLIST_PRINT();
	return 0;
}
Esempio n. 3
0
/* return value: 
   =  0: OK
   = -1: ERROR
 */
int tcp_connect(int *remotesocket_fd, struct sockaddr_in *addr, int *connect_error)
{
   int             result;
   char            text[255];
   int             try;
   
   sprintf(text, "connecting to remotesocket %d on port %d ip %s\n",
           remotesocket_fd, ntohs(addr->sin_port), inet_ntoa (addr->sin_addr));
   PRVERBOSE2("connecting to  %s:%d\n", inet_ntoa (addr->sin_addr), ntohs(addr->sin_port));
   /* connect to server */
   result = connect(*remotesocket_fd, (const struct sockaddr *) addr, sizeof(struct sockaddr_in));
   if (result == 0) {
     PRVERBOSE2("successfully connected to server %s:%d\n", inet_ntoa (addr->sin_addr), ntohs(addr->sin_port));
   }
   else {
     *connect_error = errno;
     if ( errno == ECONNREFUSED ) {
	 /*RDEBUG(".");*/     
     }
     else {
       perror("");
     }
   }
   return result;
}  

/* return value:
   number of bytes received on socket fd
 */
int tcp_read(void *buffer, unsigned size, int fd, unsigned long maxSDUsize)
{
   int             r;
   unsigned        s = size;
   char           *pos = (char *) buffer;       
   
   FN_IN_DEBUG("tcp_read");
   do {
      r = recv(fd, pos, s, 0);
      if (r == 0)
         PRDEBUG("tcp_read: 0 Bytes received\n");
      if (r > 0) {
         s -= r;
         pos += r;
      } else {
         FN_OUT_DEBUG("tcp_read");
         return (size - s);
      }
   } while (s > 0);
   
   FN_OUT_DEBUG("tcp_read");
   return (size - s);
}
Esempio n. 4
0
/* return value:
   number of bytes sent on socket fd
 */
int tcp_write(void *buffer, unsigned size, int fd, unsigned long maxSDUsize)
{
   int             w;
   unsigned        s = size;
   char           *pos = (char *) buffer;
   
   FN_IN_DEBUG("tcp_write");
   
   do {
      w = send(fd, pos, s, 0);
      if (w == 0)
         PRDEBUG("tcp_write: 0 Bytes received\n");
      if (w > 0) {
         s -= w;
         pos += w;
      } else {
         FN_OUT_DEBUG("tcp_write");
         return (size - s);
      }
   } while (s > 0);
   
   FN_OUT_DEBUG("tcp_write");
   return (size - s);
}