IOSerialBSDClient.h [plain text]
#ifndef _IOSERIALSERVER_H
#define _IOSERIALSERVER_H
#include <IOKit/IOLib.h>
#include <IOKit/IOReturn.h>
#include <IOKit/IOTypes.h>
#include <IOKit/IOService.h>
class IOSerialStreamSync;
class IOSerialSessionSync;
class IOSerialBSDClient : public IOService
{
OSDeclareDefaultStructors(IOSerialBSDClient)
public:
virtual bool start(IOService *provider);
virtual void stop(IOService *provider);
virtual bool matchPropertyTable(OSDictionary *table);
static struct cdevsw devsw;
protected:
struct ttyMap {
struct tty ftty;
IOSerialBSDClient *fClient;
} map;
IOSerialStreamSync *fProvider;
dev_t fBaseDev;
IOSerialSessionSync *fSession;
struct termios fInitTermOut, fInitTermIn;
struct timeval fDTRDownTime;
int fInOpensPending;
int fDCDDelayTicks;
boolean_t fPreempt:1;
boolean_t fIsReleasing:1;
boolean_t frxBlocked:1;
boolean_t fHasAuditSleeper:1;
boolean_t fKillThreads:1;
boolean_t fIsTimersSet:1;
boolean_t fIstxEnabled:1;
boolean_t fIsrxEnabled:1;
boolean_t fIsDCDTimer:1;
boolean_t fIsDTRDelay:1;
void *fCdevCalloutNode; void *fCdevDialinNode; IOThread frxThread; IOThread ftxThread;
virtual bool createDevNodes();
virtual bool setBaseTypeForDev();
virtual void initState();
virtual int acquireSession(dev_t dev);
virtual int waitForDCD(int flag);
virtual void initSession();
virtual void optimiseInput(struct termios *t);
virtual void convertFlowCtrl(struct termios *t);
virtual int mctl(u_int bits, int how);
virtual void getData();
virtual void procEvent();
virtual void txload(u_long *wait_mask);
virtual void rxFunc();
virtual void txFunc();
virtual void launchThreads();
virtual void killThreads();
private:
static int iossopen(dev_t dev, int flags, int devtype, struct proc *p);
static int iossclose(dev_t dev, int flags, int devtype, struct proc *p);
static int iossread(dev_t dev, struct uio *uio, int ioflag);
static int iosswrite(dev_t dev, struct uio *uio, int ioflag);
static int iossselect(dev_t dev, int which, struct proc *p);
static int iossioctl(dev_t dev, u_long cmd, caddr_t data, int fflag,
struct proc *p);
static int iossstop(struct tty *tp, int rw);
static void iossstart(struct tty *tp); static int iossparam(struct tty *tp, struct termios *t);
static void iossdcddelay(void *vThis);
};
#endif