The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Индекс форумов
Составление сообщения

Исходное сообщение
"FreeBSD на IDE вместе с SATA (ITE 8211 IDE Контроллер и Free..."
Отправлено hcl14, 02-Авг-08 23:07 
>перетыкать карту в другие PCI-слоты? (Хотя имхо маловероятно)..

Оба контроллера встроенные! Как ITE, так и ICH7. Для еще одного контроллера у меня нет даже слота свободного! Над единственным свободным pci нависает видеокарта...

>эмм,хз даже... на ITE два порта, оба пробовали использовать ?

Винт в первом случае и CDROM в втором стояли мастерами на PRI_IDE канале... Опыт подсказывает, что SEC_IDE вряди ли будет лучше...

>В общем случае тут надо точить драйвер...

А что фиксить хоть надо? Что хоть похоже на ошибку?


Есть какя-то ерунда (правда речь идет о ITE 8211F):

Hi all,

Attached is the patch for ITE IT8211F ATA controller. IT8211F is
compatible with IT8212F except the raid function. It is often used on
mainboards in addition to the only parallel ATA channel of ICH6/ICH7,
especially Asus ones. However I do not have any hardware available to
test. Anyone has such mainboards or addon cards please test this patch
to help add support for it.

Thanks,
Jia-Shiun
-------------- next part --------------
Index: sys/dev/ata/ata-chipset.c
===================================================================
RCS file: /home/ncvs/src/sys/dev/ata/ata-chipset.c,v
retrieving revision 1.126
diff -b -u -p -r1.126 ata-chipset.c
--- sys/dev/ata/ata-chipset.c    10 Jun 2005 07:43:10 -0000    1.126
+++ sys/dev/ata/ata-chipset.c    2 Aug 2005 05:06:56 -0000
@@ -1796,6 +1796,10 @@ ata_ite_ident(device_t dev)
{
     struct ata_pci_controller *ctlr = device_get_softc(dev);

+    if (pci_get_devid(dev) == ATA_IT8211F) {
+    device_set_desc(dev, "ITE IT8211F ATA133 controller");
+    ctlr->chipinit = ata_ite_chipinit;
+    return 0;
     if (pci_get_devid(dev) == ATA_IT8212F) {
    device_set_desc(dev, "ITE IT8212F ATA133 controller");
    ctlr->chipinit = ata_ite_chipinit;
Index: sys/dev/ata/ata-pci.h
===================================================================
RCS file: /home/ncvs/src/sys/dev/ata/ata-pci.h,v
retrieving revision 1.49
diff -b -u -p -r1.49 ata-pci.h
--- sys/dev/ata/ata-pci.h    8 Jun 2005 20:02:55 -0000    1.49
+++ sys/dev/ata/ata-pci.h    2 Aug 2005 05:06:56 -0000
@@ -149,6 +149,7 @@ struct ata_connect_task {
#define ATA_I31244        0x32008086

#define ATA_ITE_ID              0x1283
+#define ATA_IT8211F             0x82111283
#define ATA_IT8212F             0x82121283

#define ATA_MICRON_ID           0x1042

(версия 1.126)
Вот еще исходники, как я понял, драйвера ядра:

http://www.freebsd.org/cgi/cvsweb.cgi/src/sys/dev/ata/ata-ch... (последн. версия 1.126.2.31)
http://www.freebsd.org/cgi/cvsweb.cgi/src/sys/dev/ata/ata-ch...

Но во-первых, я не знаю как это скомпилить под фри (у меня даже доступной фри нету), во-вторых это может должно было быть учтено во FreeBSD 8 - current, но ее дрова (ata.ko, atapci.ko итд) ничего нового не дали...

Но можно ли хотя бы узнать, поможет ли это мне и как это скомпилить, если даже найду фри (скажем, на флешку поставлю) и выкачаю все, что стоит в include ? тут же ни мэйкфайла, ни h-файла, я никогда с таким дела не имел... gcc?


З.Ы. Контроллер в последнем коде упоминается только в одном месте:
Можно хотя бы узнать, может ли такое помочь?

/*
* Integrated Technology Express Inc. (ITE) chipset support functions
*/
int
ata_ite_ident(device_t dev)
{
    struct ata_pci_controller *ctlr = device_get_softc(dev);
    static struct ata_chip_id ids[] =
    {{ ATA_IT8212F, 0x00, 0x00, 0x00, ATA_UDMA6, "IT8212F" },
     { ATA_IT8211F, 0x00, 0x00, 0x00, ATA_UDMA6, "IT8211F" },
     { 0, 0, 0, 0, 0, 0}};

    if (!(ctlr->chip = ata_match_chip(dev, ids)))
    return ENXIO;

    ata_set_desc(dev);
    ctlr->chipinit = ata_ite_chipinit;
    return 0;
}

static int
ata_ite_chipinit(device_t dev)
{
    struct ata_pci_controller *ctlr = device_get_softc(dev);

    if (ata_setup_interrupt(dev))
    return ENXIO;

    ctlr->setmode = ata_ite_setmode;

    /* set PCI mode and 66Mhz reference clock */
    pci_write_config(dev, 0x50, pci_read_config(dev, 0x50, 1) & ~0x83, 1);

    /* set default active & recover timings */
    pci_write_config(dev, 0x54, 0x31, 1);
    pci_write_config(dev, 0x56, 0x31, 1);
    return 0;
}

static void
ata_ite_setmode(device_t dev, int mode)
{
    device_t gparent = GRANDPARENT(dev);
    struct ata_channel *ch = device_get_softc(device_get_parent(dev));
    struct ata_device *atadev = device_get_softc(dev);
    int devno = (ch->unit << 1) + ATA_DEV(atadev->unit);
    int error;

    /* correct the mode for what the HW supports */
    mode = ata_limit_mode(dev, mode, ATA_UDMA6);

    /* check the CBLID bits for 80 conductor cable detection */
    if (mode > ATA_UDMA2 && (pci_read_config(gparent, 0x40, 2) &
                 (ch->unit ? (1<<3) : (1<<2)))) {
    ata_print_cable(dev, "controller");
    mode = ATA_UDMA2;
    }

    /* set the wanted mode on the device */
    error = ata_controlcmd(dev, ATA_SETFEATURES, ATA_SF_SETXFER, 0, mode);

    if (bootverbose)
    device_printf(dev, "%s setting %s on ITE8212F chip\n",
              (error) ? "failed" : "success", ata_mode2str(mode));

    /* if the device accepted the mode change, setup the HW accordingly */
    if (!error) {
    if (mode >= ATA_UDMA0) {
        u_int8_t udmatiming[] =
        { 0x44, 0x42, 0x31, 0x21, 0x11, 0xa2, 0x91 };

        /* enable UDMA mode */
        pci_write_config(gparent, 0x50,
                 pci_read_config(gparent, 0x50, 1) &
                 ~(1 << (devno + 3)), 1);

        /* set UDMA timing */
        pci_write_config(gparent,
                 0x56 + (ch->unit << 2) + ATA_DEV(atadev->unit),
                 udmatiming[mode & ATA_MODE_MASK], 1);
    }
    else {
        u_int8_t chtiming[] =
        { 0xaa, 0xa3, 0xa1, 0x33, 0x31, 0x88, 0x32, 0x31 };

        /* disable UDMA mode */
        pci_write_config(gparent, 0x50,
                 pci_read_config(gparent, 0x50, 1) |
                 (1 << (devno + 3)), 1);

        /* set active and recover timing (shared between master & slave) */
        if (pci_read_config(gparent, 0x54 + (ch->unit << 2), 1) <
        chtiming[ata_mode2idx(mode)])
        pci_write_config(gparent, 0x54 + (ch->unit << 2),
                 chtiming[ata_mode2idx(mode)], 1);
    }
    atadev->mode = mode;
    }
}


/*
* JMicron chipset support functions
*/
итд...

P.S. есть еще исходники для ядра 2.6 по ссылке в самом начале темы...

 

Ваше сообщение
Имя*:
EMail:
Для отправки новых сообщений в текущей нити на email укажите знак ! перед адресом, например, !user@host.ru (!! - не показывать email).
Более тонкая настройка отправки ответов производится в профиле зарегистрированного участника форума.
Заголовок*:
Сообщение*:
  Введите код, изображенный на картинке: КОД
 
При общении не допускается: неуважительное отношение к собеседнику, хамство, унизительное обращение, ненормативная лексика, переход на личности, агрессивное поведение, обесценивание собеседника, провоцирование флейма голословными и заведомо ложными заявлениями. Не отвечайте на сообщения, явно нарушающие правила - удаляются не только сами нарушения, но и все ответы на них. Лог модерирования.



Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру