static int xmp_readdir(const char *path, void *buf, fuse_fill_dir_t filler, off_t offset, struct fuse_file_info *fi) { struct xmp_dirp *d = get_dirp(fi); (void) path; if (offset != d->offset) { seekdir(d->dp, offset); d->entry = NULL; d->offset = offset; } while (1) { struct stat st; off_t nextoff; if (!d->entry) { d->entry = readdir(d->dp); if (!d->entry) break; } memset(&st, 0, sizeof(st)); st.st_ino = d->entry->d_ino; st.st_mode = d->entry->d_type << 12; nextoff = telldir(d->dp); if (filler(buf, d->entry->d_name, &st, nextoff)) break; d->entry = NULL; d->offset = nextoff; } return 0; }
static int xmp_releasedir(const char *path, struct fuse_file_info *fi) { struct xmp_dirp *d = get_dirp(fi); (void) path; closedir(d->dp); free(d); return 0; }
static unsigned int ds1302_readbyte(unsigned int addr) { unsigned int val; unsigned long flags; local_irq_save(flags); set_dirp(get_dirp() | RTC_RESET | RTC_IODATA | RTC_SCLK); set_dp(get_dp() & ~(RTC_RESET | RTC_IODATA | RTC_SCLK)); set_dp(get_dp() | RTC_RESET); ds1302_sendbits(((addr & 0x3f) << 1) | RTC_CMD_READ); set_dirp(get_dirp() & ~RTC_IODATA); val = ds1302_recvbits(); set_dp(get_dp() & ~RTC_RESET); local_irq_restore(flags); return(val); }
static void ds1302_reset(void) { unsigned long flags; /* Hardware dependent reset/init */ local_irq_save(flags); set_dirp(get_dirp() | RTC_RESET | RTC_IODATA | RTC_SCLK); set_dp(get_dp() & ~(RTC_RESET | RTC_IODATA | RTC_SCLK)); local_irq_restore(flags); }
static void ds1302_reset(void) { unsigned long flags; /* Hardware dependant reset/init */ save_flags(flags); cli(); set_dirp(get_dirp() | RTC_RESET | RTC_IODATA | RTC_SCLK); set_dp(get_dp() & ~(RTC_RESET | RTC_IODATA | RTC_SCLK)); restore_flags(flags); }
static int xmp_releasedir (const char *path, struct fuse_file_info *fi) { struct xmp_dirp *d = get_dirp (fi); (void) path; openrfs_fuse_drop_privs (); closedir (d->dp); openrfs_fuse_restore_privs (); free (d); return 0; }
static void ds1302_writebyte(unsigned int addr, unsigned int val) { unsigned long flags; local_irq_save(flags); set_dirp(get_dirp() | RTC_RESET | RTC_IODATA | RTC_SCLK); set_dp(get_dp() & ~(RTC_RESET | RTC_IODATA | RTC_SCLK)); set_dp(get_dp() | RTC_RESET); ds1302_sendbits(((addr & 0x3f) << 1) | RTC_CMD_WRITE); ds1302_sendbits(val); set_dp(get_dp() & ~RTC_RESET); local_irq_restore(flags); }
static unsigned int ds1302_readbyte(unsigned int addr) { unsigned int val; unsigned long flags; #if 0 printk("SnapGear RTC: ds1302_readbyte(addr=%x)\n", addr); #endif save_flags(flags); cli(); set_dirp(get_dirp() | RTC_RESET | RTC_IODATA | RTC_SCLK); set_dp(get_dp() & ~(RTC_RESET | RTC_IODATA | RTC_SCLK)); set_dp(get_dp() | RTC_RESET); ds1302_sendbits(((addr & 0x3f) << 1) | RTC_CMD_READ); set_dirp(get_dirp() & ~RTC_IODATA); val = ds1302_recvbits(); set_dp(get_dp() & ~RTC_RESET); restore_flags(flags); return(val); }
static void ds1302_writebyte(unsigned int addr, unsigned int val) { unsigned long flags; #if 0 printk("SnapGear RTC: ds1302_writebyte(addr=%x)\n", addr); #endif save_flags(flags); cli(); set_dirp(get_dirp() | RTC_RESET | RTC_IODATA | RTC_SCLK); set_dp(get_dp() & ~(RTC_RESET | RTC_IODATA | RTC_SCLK)); set_dp(get_dp() | RTC_RESET); ds1302_sendbits(((addr & 0x3f) << 1) | RTC_CMD_WRITE); ds1302_sendbits(val); set_dp(get_dp() & ~RTC_RESET); restore_flags(flags); }
static int pr_readdir(const char* path, void* buf, fuse_fill_dir_t filler,off_t offset,struct fuse_file_info* fi) { int res = 0; struct stat st; struct dirent* de; DIR* dp = get_dirp(fi); (void)path; seekdir(dp,offset); while((de = readdir(dp)) != NULL) { struct stat st; memset(&st,0,sizeof(st)); st.st_ino = de->d_ino; st.st_mode = de->d_type << 12; if(filler(buf,de->d_name,&st,telldir(dp))) break; } return res; }