Возможно вы искали: 'Atari: 80 Classic Game...'

May 15 2025 18:55:52
  • Как сделать 8Gamers.Ru домашней страницей?
  • Игры
    • База данных по играх
    • Игровые новости
    • Игровая индустрия
    • Обзоры на игры
    • Прохождения игр
    • Гайды к играм
    • Превью о играх
    • Игровые тизеры
    • Игровые арты
    • Игровые обои
    • Игровые скриншоты
    • Игровые обложки
    • Игровые трейлеры
    • Игровое видео
    • Вышедшие игры
    • Ближайшие релизы игр
  • Кино и ТВ
    • База данных по кино
    • Статьи о кино
    • Постеры
    • Кадры из кино
    • Кино трейлеры
    • Сегодня в кино
    • Скоро в кино
  • Комиксы и манга
    • Манга по алфавиту
    • База данных по комиксах
    • Читать онлайн комиксы
    • Читать онлайн манга
    • База персонажей
  • Читы и коды
    • Чит-коды для PC игр
    • Чит-коды для консольных игр
    • Трейнеры
    • Коды Game Genie
  • Моддинг
    • Модификации
    • Карты к играм
    • Программы для моддинга
    • Статьи о моддинге
  • Геймдев
    • Всё о создании игр
    • Список движков
    • Утилиты в помощь игроделу
    • Конструкторы игр
    • Игровые движки
    • Библиотеки разработки
    • 3D-модели
    • Спрайты и тайлы
    • Музыка и звуки
    • Текстуры и фоны
  • Рецензии
    • Игры
    • Кино
    • Аниме
    • Комиксы
    • Мангу
    • Саундтреки
  • Саундтреки
    • Лирика
  • Файлы
    • Патчи к играм
    • Русификаторы к играм
    • Сохранения к играм
    • Субтитры к кино
  • Медиа
    • Видео
    • Фото
    • Аудио
    • Фан-арты
    • Косплей
    • Фото с виставок
    • Девушки из игр
    • Рисунки
    • Рисуем онлайн
    • Фотохостинг
  • Юмор
    • Анекдоты
    • Афоризмы
    • Истории
    • Стишки и эпиграммы
    • Тосты
    • Цитаты
  • Флеш
    • Азартные
    • Аркады
    • Бродилки
    • Гонки
    • Для девочек
    • Для мальчиков
    • Драки
    • Квесты
    • Леталки
    • Логические
    • Мультфильмы
    • Открытки
    • Приколы
    • Разное
    • Спорт
    • Стратегии
    • Стрелялки
Статистика

Статей: 87772
Просмотров: 96111483
Игры
Injustice:  Gods Among Us
Injustice: Gods Among Us
...
Dark Souls 2
Dark Souls 2
Dark Souls II - вторая часть самой хардкорной ролевой игры 2011-2012 года, с новым героем, сюжето...
Battlefield 4
Battlefield 4
Battlefield 4 - продолжение венценосного мультиплеер-ориентированного шутера от первого ли...
Кино
Steins;Gate
Steins;Gate
Любители японской анимации уже давно поняли ,что аниме сериалы могут дать порой гораздо больше пи...
Ку! Кин-дза-дза
Ку! Кин-дза-дза
Начинающий диджей Толик и всемирно известный виолончелист Владимир Чижов встречают на шумной моск...
Обзоры на игры
• Обзор Ibara [PCB/PS2] 18357
• Обзор The Walking ... 18801
• Обзор DMC: Devil M... 19879
• Обзор на игру Valk... 15877
• Обзор на игру Stars! 17764
• Обзор на Far Cry 3 17948
• Обзор на Resident ... 16024
• Обзор на Chivalry:... 17508
• Обзор на игру Kerb... 17981
• Обзор игры 007: Fr... 16619
Превью о играх
• Превью к игре Comp... 17960
• Превью о игре Mage... 14464
• Превью Incredible ... 14721
• Превью Firefall 13479
• Превью Dead Space 3 16334
• Превью о игре SimC... 14730
• Превью к игре Fuse 15442
• Превью Red Orche... 15542
• Превью Gothic 3 16343
• Превью Black & W... 17354
Главная » Статьи » Разное » /dev/io или управление lptом (linux driver example)

/dev/io или управление lptом (linux driver example)

Ключевые слова: linux, driver, example, (найти похожие документы)

_ RU.UNIX.BSD (2:5077/15.22) _____________________________________ RU.UNIX.BSD _
From : vadik likholetov 2:5030/266 Wed 30 Dec 98 17:06
Subj : /dev/io или управление lptом
________________________________________________________________________________
кто-то там просил -- возьмите осмысленный драйвер, с которого можно
начать ;-)

/*
* Power controller (c) 1998, vadik likholetov vadik@sensi.org Hardware by
* Alexandr Priomov, alexandr@sensi.org
*/

#include "pwc.h"

#include <sys/param.h>
#include <sys/systm.h>
#include <sys/kernel.h>
#include <sys/conf.h>
#include <sys/uio.h>


#include <i386/isa/isa.h>
#include <i386/isa/isa_device.h>
#include <i386/isa/lptreg.h>

static struct pwc_softc {
int sc_port;
short sc_state;
int hw_state;
} pwc_sc[NPWC];

#define TASK_SIZE 12

#define DEFAULT 0 /* default state for device */
#define OPEN (1<<0) /* device is open */
#define OBUSY (1<<1) /* doing output */
#define OPENDING (1<<2) /* pending output */


static int pwc_probe(struct isa_device * dvp);
static int pwc_attach(struct isa_device * isdp);

struct isa_driver pwcdriver = {
pwc_probe, pwc_attach, "pwc"
};


static d_open_t pwc_open;
static d_close_t pwc_close;
static d_write_t pwc_write;


#define CDEV_MAJOR 220

static struct cdevsw pwc_cdevsw =
{pwc_open, pwc_close, noread, pwc_write,
noioctl, nullstop, nullreset, nodevtotty,
seltrue, nommap, nostrat, "pwc", NULL, -1};

int
pwc_probe(struct isa_device * dvp)
{
/* TODO -- test hardware for presence */
return 1;
}

int
pwc_attach(struct isa_device * isdp)
{
struct pwc_softc *sc;
int unit = isdp->id_unit;

sc = pwc_sc + unit;
sc->sc_port = isdp->id_iobase;
sc->sc_state = DEFAULT;
outb(sc->sc_port, 0);
outb(sc->sc_port + lpt_control, 0);
return 1;
}


static int
pwc_open(dev_t dev, int flags, int fmt, struct proc * p)
{
struct pwc_softc *sc;

u_int unit = minor(dev);

sc = pwc_sc + unit;

if ((unit >= NPWC) || (sc->sc_port == 0))
return ENXIO;

if (sc->sc_state != DEFAULT)
return EBUSY;

return 0;
}

static int
pwc_close(dev_t dev, int flags, int fmt, struct proc * p)
{
struct pwc_softc *sc = pwc_sc + minor(dev);

sc->sc_state &= ~OPEN;
while (sc->sc_state & OBUSY)
if (tsleep((caddr_t) sc, PZERO | PCATCH, "pwcclose", hz) != EWOULDBLOCK)
break;

sc->sc_state = DEFAULT;

return 0;
}

static int
pwc_write(dev_t dev, struct uio * uio, int ioflag)
{
struct pwc_softc *sc = pwc_sc + minor(dev);
char buffer[TASK_SIZE];
int port = sc->sc_port;
int s;
int ret;
int i, j, d;

if (uio->uio_resid != TASK_SIZE)
return EOPNOTSUPP;

s = spltty();
if (sc->sc_state & OBUSY)
return EBUSY;

sc->sc_state |= OBUSY;
splx(s);

/* output goes there */

uiomove(buffer, TASK_SIZE, uio);

if (!(inb(port + lpt_status) & ~LPS_NACK)) {
printf("pwc%d: no power on devicen", minor(dev));
ret = EIO;
goto gout;
}
#define NTRIES 10
for (i = 0; i < TASK_SIZE; i++) {
for (j = 0; j < NTRIES; j++)
if ((inb(port + lpt_status) & LPS_NBSY))
break;
else
DELAY(1);
if (j == NTRIES) {
printf("pwc%d: timeout(1) waiting for ~BSY (%x)n",
minor(dev),inb(port+lpt_status));
ret = EIO;
goto gout;
}
d = buffer[i] == '1' ? 1 : 0;

if (i > 3 && i < 8)
i ^= 1;

outb(port + lpt_data, d);
outb(port + lpt_control, LPC_STB);
DELAY(1); /* ??? */
outb(port + lpt_control, 0);
}

for (j = 0; j < NTRIES; j++)
if (inb(port + lpt_status) & LPS_NBSY)
break;
else
DELAY(1);

if (j == NTRIES) {
printf("pwc%d: timeout(2) waiting for ~BSYn", minor(dev));
ret = EIO;
goto gout;
}
ret = 0;
gout:
s = spltty();
sc->sc_state &= ~OBUSY;

#if 0
if (sc->sc_state & OPENDING)
#endif
wakeup((caddr_t) sc);

splx(s);
return ret;
}


static pwc_devsw_installed = 0;

static void
pwc_drvinit(void *unused)
{
dev_t dev;

if (!pwc_devsw_installed) {
dev = makedev(CDEV_MAJOR, 0);
cdevsw_add(&dev, &pwc_cdevsw, NULL);
pwc_devsw_installed = 1;
}
}

SYSINIT(pwcdev, SI_SUB_DRIVERS, SI_ORDER_MIDDLE + CDEV_MAJOR, pwc_drvinit,
NULL)

--
vadik likholetov
--- ifmail v.2.12.os.sensi
* Origin: /kernel: last message repeated 2 times (2:5030/266@fidonet)

976 Прочтений •  [/dev/io или управление lptом (linux driver example)] [08.05.2012] [Комментариев: 0]
Добавил: Ukraine Vova
Ссылки
HTML: 
[BB Url]: 
Похожие статьи
Название Добавил Добавлено
• /dev/io или управление lptом (linux... Ukraine Vova 08.05.2012
Ни одного комментария? Будешь первым :).
Пожалуйста, авторизуйтесь для добавления комментария.

Проект входит в сеть сайтов «8Gamers Network»

Все права сохранены. 8Gamers.NET © 2011 - 2025

Статьи
Рецензия на Pressure
Рецензия на Pressure
Чтобы обратить на себя внимание, начинающие маленькие разработчики, как правило, уходят в жанры, ...
Рецензия на Lost Chronicles of Zerzura
Рецензия на Lost Chron...
Игры, сделанные без любви и старания, похожи на воздушный шар – оболочка есть, а внутри пусто. Lo...
Рецензия на The Bridge
Рецензия на The Bridge
«Верх» и «низ» в The Bridge — понятия относительные. Прогуливаясь под аркой, можно запросто перей...
Рецензия на SimCity
Рецензия на SimCity
Когда месяц назад состоялся релиз SimCity, по Сети прокатилось цунами народного гнева – глупые ош...
Рецензия на Strategy & Tactics: World War 2
Рецензия на Strategy &...
Название Strategy & Tactics: World War II вряд ли кому-то знакомо. Зато одного взгляда на ее скри...
Рецензия на игру Scribblenauts Unlimited
Рецензия на игру Scrib...
По сложившейся традиции в информационной карточке игры мы приводим в пример несколько похожих игр...
Рецензия на игру Walking Dead: Survival Instinct, The
Рецензия на игру Walki...
Зомби и продукция-по-лицензии — которые и сами по себе не лучшие представители игровой биосферы —...
Обратная связь | RSS | Донейт | Статистика | Команда | Техническая поддержка