Lines Matching refs:channel

37 	chan_t *channel = NULL;  in create_new_channel()  local
42 channel = &fdset[i]; in create_new_channel()
43 channel->index = index; in create_new_channel()
48 return channel; in create_new_channel()
68 static int channel_to_fd(chan_t *channel) in channel_to_fd() argument
70 return (channel == NULL) ? -1 : (channel - fdset); in channel_to_fd()
142 static void channel_clear(chan_t *channel) in channel_clear() argument
144 channel->offset = 0; in channel_clear()
145 channel->qid = 0; in channel_clear()
146 channel->index = NODEV; in channel_clear()
147 channel->dev = 0; in channel_clear()
148 channel->mode = 0; in channel_clear()
154 void channel_close(chan_t *channel) in channel_close() argument
156 if (channel != NULL) { in channel_close()
157 channel_clear(channel); in channel_close()
167 int buf_to_channel(chan_t *channel, void *dst, void *src, int nbytes, long len) in buf_to_channel() argument
171 if ((channel == NULL) || (dst == NULL) || (src == NULL)) { in buf_to_channel()
175 if (channel->offset >= len) { in buf_to_channel()
179 if ((channel->offset + nbytes) > len) { in buf_to_channel()
180 nbytes = len - channel->offset; in buf_to_channel()
183 memcpy(dst, addr + channel->offset, nbytes); in buf_to_channel()
185 channel->offset += nbytes; in buf_to_channel()
197 chan_t *channel; in mount_point_to_channel() local
201 channel = mp->new; in mount_point_to_channel()
202 if (channel == NULL) { in mount_point_to_channel()
206 if ((channel->index == index) && (channel->qid == qid)) { in mount_point_to_channel()
235 chan_t *channel; in devattach() local
243 channel = create_new_channel(index); in devattach()
244 if (channel == NULL) { in devattach()
248 channel->dev = dev; in devattach()
249 channel->qid = CHDIR; in devattach()
251 return channel; in devattach()
263 chan_t *mnt, *channel; in path_to_channel() local
272 channel = clone(&slash_channel, NULL); in path_to_channel()
290 channel = attach(elem[0], n); in path_to_channel()
296 if (channel == NULL) { in path_to_channel()
302 if ((channel->qid & CHDIR) == 0) { in path_to_channel()
306 if (devtab[channel->index]->walk(channel, elem) < 0) { in path_to_channel()
307 channel_close(channel); in path_to_channel()
311 mnt = mount_point_to_channel(channel->index, channel->qid); in path_to_channel()
313 clone(mnt, channel); in path_to_channel()
322 return channel; in path_to_channel()
325 channel_close(channel); in path_to_channel()
348 chan_t *devclone(chan_t *channel, chan_t *new_channel) in devclone() argument
350 if (channel == NULL) { in devclone()
355 new_channel = create_new_channel(channel->index); in devclone()
361 new_channel->qid = channel->qid; in devclone()
362 new_channel->dev = channel->dev; in devclone()
363 new_channel->mode = channel->mode; in devclone()
364 new_channel->offset = channel->offset; in devclone()
365 new_channel->index = channel->index; in devclone()
376 int devwalk(chan_t *channel, const char *name, const dirtab_t *tab, in devwalk() argument
382 if ((channel == NULL) || (name == NULL) || (gen == NULL)) { in devwalk()
391 switch ((*gen)(channel, tab, ntab, i, &dir)) { in devwalk()
400 channel->qid = dir.qid; in devwalk()
412 int dirread(chan_t *channel, dir_t *dir, const dirtab_t *tab, in dirread() argument
417 if ((channel == NULL) || (dir == NULL) || (gen == NULL)) { in dirread()
421 i = channel->offset/sizeof(dir_t); in dirread()
422 ret = (*gen)(channel, tab, ntab, i, dir); in dirread()
424 channel->offset += sizeof(dir_t); in dirread()
433 void make_dir_entry(chan_t *channel, dir_t *dir, in make_dir_entry() argument
436 if ((channel == NULL) || (dir == NULL) || (name == NULL)) { in make_dir_entry()
449 dir->index = channel->index; in make_dir_entry()
450 dir->dev = channel->dev; in make_dir_entry()
458 int devgen(chan_t *channel, const dirtab_t *tab, int ntab, int n, dir_t *dir) in devgen() argument
462 if ((channel == NULL) || (dir == NULL) || (tab == NULL) || in devgen()
468 make_dir_entry(channel, dir, dp->name, dp->length, dp->qid, dp->perm); in devgen()
478 chan_t *channel; in open() local
488 channel = path_to_channel(path, mode); in open()
490 return channel_to_fd(channel); in open()
498 chan_t *channel; in close() local
500 channel = fd_to_channel(fd); in close()
501 if (channel == NULL) { in close()
505 channel_close(channel); in close()
566 chan_t *channel; in stat() local
592 channel = path_to_channel(dirname, O_STAT); in stat()
593 if (channel == NULL) { in stat()
597 r = devtab[channel->index]->stat(channel, path, dir); in stat()
598 channel_close(channel); in stat()
610 chan_t *channel; in read() local
616 channel = fd_to_channel(fd); in read()
617 if (channel == NULL) { in read()
621 if (((channel->qid & CHDIR) != 0) && (n < sizeof(dir_t))) { in read()
625 return devtab[channel->index]->read(channel, buf, n); in read()
635 chan_t *channel; in write() local
641 channel = fd_to_channel(fd); in write()
642 if (channel == NULL) { in write()
646 if ((channel->qid & CHDIR) != 0) { in write()
650 return devtab[channel->index]->write(channel, buf, n); in write()
659 chan_t *channel; in seek() local
661 channel = fd_to_channel(fd); in seek()
662 if (channel == NULL) { in seek()
666 if ((channel->qid & CHDIR) != 0) { in seek()
670 return devtab[channel->index]->seek(channel, off, whence); in seek()
677 chan_t *deverrmount(chan_t *channel, const char *spec) in deverrmount() argument
686 int deverrwrite(chan_t *channel, void *buf, int n) in deverrwrite() argument
695 int deverrseek(chan_t *channel, long off, int whence) in deverrseek() argument
704 int devseek(chan_t *channel, long off, int whence) in devseek() argument
708 channel->offset = off; in devseek()
711 channel->offset += off; in devseek()
725 static int add_mount_point(chan_t *channel, const char *new) in add_mount_point() argument
756 mp->old = channel; in add_mount_point()
771 chan_t *channel; in bind() local
773 channel = path_to_channel(old, O_BIND); in bind()
774 if (channel == NULL) { in bind()
778 if (add_mount_point(channel, new) < 0) { in bind()
779 channel_close(channel); in bind()
793 chan_t *channel, *mount_point_chan; in mount() local
796 channel = path_to_channel(srv, O_RDWR); in mount()
797 if (channel == NULL) { in mount()
801 mount_point_chan = devtab[channel->index]->mount(channel, spec); in mount()
811 channel_close(channel); in mount()
818 channel_close(channel); in mount()
830 chan_t *channel, *cloned_channel; in debugfs_init() local
832 for (channel = fdset; channel < &fdset[NR_CHANS]; channel++) { in debugfs_init()
833 channel_clear(channel); in debugfs_init()
836 channel = devattach('/', 0); in debugfs_init()
837 if (channel == NULL) { in debugfs_init()
841 cloned_channel = clone(channel, &slash_channel); in debugfs_init()
846 channel_close(channel); in debugfs_init()