Units
Translation components API.
See the Weblate's Web API documentation for detailed description of the API.
GET /api/translations/freebsd-doc/boooks_arch-handbook/en/units/?format=api&page=55
https://translate-dev.freebsd.org/api/translations/freebsd-doc/boooks_arch-handbook/en/units/?format=api&page=54", "results": [ { "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/boooks_arch-handbook/en/?format=api", "source": [ "The Design and Implementation of the 4.4 BSD Operating System" ], "previous_source": "", "target": [ "The Design and Implementation of the 4.4 BSD Operating System" ], "id_hash": -529928299428620212, "content_hash": -529928299428620212, "location": "book.translate.xml:23958", "context": "", "note": "(itstool) path: biblioentry/citetitle", "flags": "", "labels": [], "state": 100, "fuzzy": false, "translated": true, "approved": false, "position": 2720, "has_suggestion": false, "has_comment": false, "has_failing_check": true, "num_words": 10, "source_unit": "https://translate-dev.freebsd.org/api/units/104845/?format=api", "priority": 100, "id": 104845, "web_url": "https://translate-dev.freebsd.org/translate/freebsd-doc/boooks_arch-handbook/en/?checksum=78a55104f421584c", "url": "https://translate-dev.freebsd.org/api/units/104845/?format=api", "explanation": "", "extra_flags": "", "pending": false, "timestamp": "2019-10-20T12:22:18.421909Z" }, { "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/boooks_arch-handbook/en/?format=api", "source": [ "1-2" ], "previous_source": "", "target": [ "1-2" ], "id_hash": -6195169577044518869, "content_hash": -6195169577044518869, "location": "book.translate.xml:23961", "context": "", "note": "(itstool) path: biblioentry/pagenums", "flags": "", "labels": [], "state": 100, "fuzzy": false, "translated": true, "approved": false, "position": 2721, "has_suggestion": false, "has_comment": false, "has_failing_check": false, "num_words": 1, "source_unit": "https://translate-dev.freebsd.org/api/units/104846/?format=api", "priority": 100, "id": 104846, "web_url": "https://translate-dev.freebsd.org/translate/freebsd-doc/boooks_arch-handbook/en/?checksum=2a065617d4f4582b", "url": "https://translate-dev.freebsd.org/api/units/104846/?format=api", "explanation": "", "extra_flags": "", "pending": false, "timestamp": "2019-10-20T12:22:18.438849Z" }, { "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/boooks_arch-handbook/en/?format=api", "source": [ "The value of <literal>0xfffffff0</literal> is slightly less than 4 GB, so unless the machine has 4 GB of physical memory, it cannot point to a valid memory address. The computer's hardware translates this address so that it points to a <acronym>BIOS</acronym> memory block." ], "previous_source": "", "target": [ "The value of <literal>0xfffffff0</literal> is slightly less than 4 GB, so unless the machine has 4 GB of physical memory, it cannot point to a valid memory address. The computer's hardware translates this address so that it points to a <acronym>BIOS</acronym> memory block." ], "id_hash": -5189313260644394010, "content_hash": -5189313260644394010, "location": "book.translate.xml:426", "context": "", "note": "(itstool) path: sect1/para", "flags": "", "labels": [], "state": 100, "fuzzy": false, "translated": true, "approved": false, "position": 48, "has_suggestion": false, "has_comment": false, "has_failing_check": true, "num_words": 43, "source_unit": "https://translate-dev.freebsd.org/api/units/157530/?format=api", "priority": 100, "id": 157530, "web_url": "https://translate-dev.freebsd.org/translate/freebsd-doc/boooks_arch-handbook/en/?checksum=37fbdb1567111be6", "url": "https://translate-dev.freebsd.org/api/units/157530/?format=api", "explanation": "", "extra_flags": "", "pending": false, "timestamp": "2020-04-18T18:15:03.340581Z" }, { "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/boooks_arch-handbook/en/?format=api", "source": [ "An interrupt is requested with number <literal>0x1a</literal> and argument <literal>0</literal> in register <literal>%ah</literal>. The <acronym>BIOS</acronym> has a predefined set of services, requested by applications as software-generated interrupts through the <literal>int</literal> instruction and receiving arguments in registers (in this case, <literal>%ah</literal>). Here, particularly, we are requesting the number of clock ticks since last midnight; this value is computed by the <acronym>BIOS</acronym> through the <acronym>RTC</acronym> (Real Time Clock). This clock can be programmed to work at frequencies ranging from 2 Hz to 8192 Hz. The <acronym>BIOS</acronym> sets it to 18.2 Hz at startup. When the request is satisfied, a 32-bit result is returned by the <acronym>BIOS</acronym> in registers <literal>%cx</literal> and <literal>%dx</literal> (lower bytes in <literal>%dx</literal>). This result (the <literal>%dx</literal> part) is copied to register <literal>%di</literal>, and the value of the <varname>TICKS</varname> variable is added to <literal>%di</literal>. This variable resides in <filename>boot0</filename> at offset <literal>_TICKS</literal> (a negative value) from register <literal>%bp</literal> (which, recall, points to <literal>0x800</literal>). The default value of this variable is <literal>0xb6</literal> (182 in decimal). Now, the idea is that <filename>boot0</filename> constantly requests the time from the <acronym>BIOS</acronym>, and when the value returned in register <literal>%dx</literal> is greater than the value stored in <literal>%di</literal>, the time is up and the default selection will be made. Since the RTC ticks 18.2 times per second, this condition will be met after 10 seconds (this default behavior can be changed in the <filename>Makefile</filename>). Until this time has passed, <filename>boot0</filename> continually asks the <acronym>BIOS</acronym> for any user input; this is done through <literal>int 0x16</literal>, argument <literal>1</literal> in <literal>%ah</literal>." ], "previous_source": "", "target": [ "An interrupt is requested with number <literal>0x1a</literal> and argument <literal>0</literal> in register <literal>%ah</literal>. The <acronym>BIOS</acronym> has a predefined set of services, requested by applications as software-generated interrupts through the <literal>int</literal> instruction and receiving arguments in registers (in this case, <literal>%ah</literal>). Here, particularly, we are requesting the number of clock ticks since last midnight; this value is computed by the <acronym>BIOS</acronym> through the <acronym>RTC</acronym> (Real Time Clock). This clock can be programmed to work at frequencies ranging from 2 Hz to 8192 Hz. The <acronym>BIOS</acronym> sets it to 18.2 Hz at startup. When the request is satisfied, a 32-bit result is returned by the <acronym>BIOS</acronym> in registers <literal>%cx</literal> and <literal>%dx</literal> (lower bytes in <literal>%dx</literal>). This result (the <literal>%dx</literal> part) is copied to register <literal>%di</literal>, and the value of the <varname>TICKS</varname> variable is added to <literal>%di</literal>. This variable resides in <filename>boot0</filename> at offset <literal>_TICKS</literal> (a negative value) from register <literal>%bp</literal> (which, recall, points to <literal>0x800</literal>). The default value of this variable is <literal>0xb6</literal> (182 in decimal). Now, the idea is that <filename>boot0</filename> constantly requests the time from the <acronym>BIOS</acronym>, and when the value returned in register <literal>%dx</literal> is greater than the value stored in <literal>%di</literal>, the time is up and the default selection will be made. Since the RTC ticks 18.2 times per second, this condition will be met after 10 seconds (this default behavior can be changed in the <filename>Makefile</filename>). Until this time has passed, <filename>boot0</filename> continually asks the <acronym>BIOS</acronym> for any user input; this is done through <literal>int 0x16</literal>, argument <literal>1</literal> in <literal>%ah</literal>." ], "id_hash": -2307518497613111655, "content_hash": -2307518497613111655, "location": "book.translate.xml:858", "context": "", "note": "(itstool) path: sect1/para", "flags": "", "labels": [], "state": 100, "fuzzy": false, "translated": true, "approved": false, "position": 95, "has_suggestion": false, "has_comment": false, "has_failing_check": false, "num_words": 253, "source_unit": "https://translate-dev.freebsd.org/api/units/157532/?format=api", "priority": 100, "id": 157532, "web_url": "https://translate-dev.freebsd.org/translate/freebsd-doc/boooks_arch-handbook/en/?checksum=5ffa0c26f5209e99", "url": "https://translate-dev.freebsd.org/api/units/157532/?format=api", "explanation": "", "extra_flags": "", "pending": false, "timestamp": "2020-04-18T18:15:03.447969Z" }, { "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/boooks_arch-handbook/en/?format=api", "source": [ "Example of a Sample Echo Pseudo-Device Driver for FreeBSD 10.X - 12.X" ], "previous_source": "", "target": [ "Example of a Sample Echo Pseudo-Device Driver for FreeBSD 10.X - 12.X" ], "id_hash": 9144301548006342219, "content_hash": 9144301548006342219, "location": "book.translate.xml:16259", "context": "", "note": "(itstool) path: example/title", "flags": "", "labels": [], "state": 100, "fuzzy": false, "translated": true, "approved": false, "position": 1705, "has_suggestion": false, "has_comment": false, "has_failing_check": true, "num_words": 12, "source_unit": "https://translate-dev.freebsd.org/api/units/157534/?format=api", "priority": 100, "id": 157534, "web_url": "https://translate-dev.freebsd.org/translate/freebsd-doc/boooks_arch-handbook/en/?checksum=fee715cf2ff8fe4b", "url": "https://translate-dev.freebsd.org/api/units/157534/?format=api", "explanation": "", "extra_flags": "", "pending": false, "timestamp": "2020-04-18T18:15:03.700662Z" }, { "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/boooks_arch-handbook/en/?format=api", "source": [ "$FreeBSD$" ], "previous_source": "", "target": [ "$FreeBSD$" ], "id_hash": -6157127918850188850, "content_hash": -6157127918850188850, "location": "book.translate.xml:147, book.translate.xml:226", "context": "", "note": "(itstool) path: info/pubdate\n(itstool) path: info/releaseinfo", "flags": "", "labels": [], "state": 100, "fuzzy": false, "translated": true, "approved": false, "position": 4, "has_suggestion": false, "has_comment": false, "has_failing_check": true, "num_words": 1, "source_unit": "https://translate-dev.freebsd.org/api/units/229385/?format=api", "priority": 100, "id": 229385, "web_url": "https://translate-dev.freebsd.org/translate/freebsd-doc/boooks_arch-handbook/en/?checksum=2a8d7cc7984b59ce", "url": "https://translate-dev.freebsd.org/api/units/229385/?format=api", "explanation": "", "extra_flags": "", "pending": false, "timestamp": "2021-01-09T14:37:12.308799Z" }, { "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/boooks_arch-handbook/en/?format=api", "source": [ "As <filename>boot0</filename> is loaded by the <acronym>BIOS</acronym> to address <literal>0x7C00</literal>, it copies itself to address <literal>0x600</literal> and then transfers control there (recall that it was linked to execute at address <literal>0x600</literal>). The source address, <literal>0x7c00</literal>, is copied to register <literal>%si</literal>. The destination address, <literal>0x600</literal>, to register <literal>%di</literal>. The number of bytes to copy, <literal>512</literal> (the program's size), is copied to register <literal>%cx</literal>. Next, the <literal>rep</literal> instruction repeats the instruction that follows, that is, <literal>movsb</literal>, the number of times dictated by the <literal>%cx</literal> register. The <literal>movsb</literal> instruction copies the byte pointed to by <literal>%si</literal> to the address pointed to by <literal>%di</literal>. This is repeated another 511 times. On each repetition, both the source and destination registers, <literal>%si</literal> and <literal>%di</literal>, are incremented by one. Thus, upon completion of the 512-byte copy, <literal>%di</literal> has the value <literal>0x600</literal>+<literal>512</literal>= <literal>0x800</literal>, and <literal>%si</literal> has the value <literal>0x7c00</literal>+<literal>512</literal>= <literal>0x7e00</literal>; we have thus completed the code <emphasis>relocation</emphasis>." ], "previous_source": "", "target": [ "As <filename>boot0</filename> is loaded by the <acronym>BIOS</acronym> to address <literal>0x7C00</literal>, it copies itself to address <literal>0x600</literal> and then transfers control there (recall that it was linked to execute at address <literal>0x600</literal>). The source address, <literal>0x7c00</literal>, is copied to register <literal>%si</literal>. The destination address, <literal>0x600</literal>, to register <literal>%di</literal>. The number of bytes to copy, <literal>512</literal> (the program's size), is copied to register <literal>%cx</literal>. Next, the <literal>rep</literal> instruction repeats the instruction that follows, that is, <literal>movsb</literal>, the number of times dictated by the <literal>%cx</literal> register. The <literal>movsb</literal> instruction copies the byte pointed to by <literal>%si</literal> to the address pointed to by <literal>%di</literal>. This is repeated another 511 times. On each repetition, both the source and destination registers, <literal>%si</literal> and <literal>%di</literal>, are incremented by one. Thus, upon completion of the 512-byte copy, <literal>%di</literal> has the value <literal>0x600</literal>+<literal>512</literal>= <literal>0x800</literal>, and <literal>%si</literal> has the value <literal>0x7c00</literal>+<literal>512</literal>= <literal>0x7e00</literal>; we have thus completed the code <emphasis>relocation</emphasis>." ], "id_hash": 7019296161213301053, "content_hash": 7019296161213301053, "location": "book.translate.xml:650", "context": "", "note": "(itstool) path: sect1/para", "flags": "", "labels": [], "state": 100, "fuzzy": false, "translated": true, "approved": false, "position": 77, "has_suggestion": false, "has_comment": false, "has_failing_check": true, "num_words": 149, "source_unit": "https://translate-dev.freebsd.org/api/units/229386/?format=api", "priority": 100, "id": 229386, "web_url": "https://translate-dev.freebsd.org/translate/freebsd-doc/boooks_arch-handbook/en/?checksum=e1698cab3661c13d", "url": "https://translate-dev.freebsd.org/api/units/229386/?format=api", "explanation": "", "extra_flags": "", "pending": false, "timestamp": "2021-01-09T14:37:12.442477Z" }, { "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/boooks_arch-handbook/en/?format=api", "source": [ "So <filename>boot1</filename> occupies exactly the first 512 bytes of <filename>boot</filename> and, because <filename>boot</filename> is written to the first sector of the FreeBSD slice, <filename>boot1</filename> fits exactly in this first sector. When <literal>nread</literal> reads the first 16 sectors of the FreeBSD slice, it effectively reads the entire <filename>boot</filename> file <_:footnote-1/>. We will see more details about how <filename>boot</filename> is formed from <filename>boot1</filename> and <filename>boot2</filename> in the next section." ], "previous_source": "", "target": [ "So <filename>boot1</filename> occupies exactly the first 512 bytes of <filename>boot</filename> and, because <filename>boot</filename> is written to the first sector of the FreeBSD slice, <filename>boot1</filename> fits exactly in this first sector. When <literal>nread</literal> reads the first 16 sectors of the FreeBSD slice, it effectively reads the entire <filename>boot</filename> file <_:footnote-1/>. We will see more details about how <filename>boot</filename> is formed from <filename>boot1</filename> and <filename>boot2</filename> in the next section." ], "id_hash": 4770993697178643548, "content_hash": 4770993697178643548, "location": "book.translate.xml:1263", "context": "", "note": "(itstool) path: sect1/para", "flags": "", "labels": [], "state": 100, "fuzzy": false, "translated": true, "approved": false, "position": 137, "has_suggestion": false, "has_comment": false, "has_failing_check": true, "num_words": 67, "source_unit": "https://translate-dev.freebsd.org/api/units/229387/?format=api", "priority": 100, "id": 229387, "web_url": "https://translate-dev.freebsd.org/translate/freebsd-doc/boooks_arch-handbook/en/?checksum=c235f97d61f5ec5c", "url": "https://translate-dev.freebsd.org/api/units/229387/?format=api", "explanation": "", "extra_flags": "", "pending": false, "timestamp": "2021-01-09T14:37:12.568875Z" }, { "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/boooks_arch-handbook/en/?format=api", "source": [ "This code disables interrupts, sets up a working stack (starting at address <literal>0x1800</literal>) and clears the flags in the EFLAGS register. Note that the <literal>popfl</literal> instruction pops out a doubleword (4 bytes) from the stack and places it in the EFLAGS register. As the value actually popped is <literal>2</literal>, the EFLAGS register is effectively cleared (IA-32 requires that bit 2 of the EFLAGS register always be 1)." ], "previous_source": "", "target": [ "This code disables interrupts, sets up a working stack (starting at address <literal>0x1800</literal>) and clears the flags in the EFLAGS register. Note that the <literal>popfl</literal> instruction pops out a doubleword (4 bytes) from the stack and places it in the EFLAGS register. As the value actually popped is <literal>2</literal>, the EFLAGS register is effectively cleared (IA-32 requires that bit 2 of the EFLAGS register always be 1)." ], "id_hash": 3529489275754486430, "content_hash": 3529489275754486430, "location": "book.translate.xml:1680", "context": "", "note": "(itstool) path: sect1/para", "flags": "", "labels": [], "state": 100, "fuzzy": false, "translated": true, "approved": false, "position": 179, "has_suggestion": false, "has_comment": false, "has_failing_check": true, "num_words": 67, "source_unit": "https://translate-dev.freebsd.org/api/units/229388/?format=api", "priority": 100, "id": 229388, "web_url": "https://translate-dev.freebsd.org/translate/freebsd-doc/boooks_arch-handbook/en/?checksum=b0fb43cbd7e59a9e", "url": "https://translate-dev.freebsd.org/api/units/229388/?format=api", "explanation": "", "extra_flags": "", "pending": false, "timestamp": "2021-01-09T14:37:12.656413Z" }, { "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/boooks_arch-handbook/en/?format=api", "source": [ "The next step is to initialize the <acronym>TSS</acronym> (Task-State Segment). The <acronym>TSS</acronym> is a hardware feature that helps the operating system or executive software implement multitasking functionality through process abstraction. The IA-32 architecture demands the creation and use of <emphasis>at least</emphasis> one <acronym>TSS</acronym> if multitasking facilities are used or different privilege levels are defined. Since the <filename>boot2</filename> client is executed in privilege level 3, but the <acronym>BTX</acronym> server does in privilege level 0, a <acronym>TSS</acronym> must be defined:" ], "previous_source": "", "target": [ "The next step is to initialize the <acronym>TSS</acronym> (Task-State Segment). The <acronym>TSS</acronym> is a hardware feature that helps the operating system or executive software implement multitasking functionality through process abstraction. The IA-32 architecture demands the creation and use of <emphasis>at least</emphasis> one <acronym>TSS</acronym> if multitasking facilities are used or different privilege levels are defined. Since the <filename>boot2</filename> client is executed in privilege level 3, but the <acronym>BTX</acronym> server does in privilege level 0, a <acronym>TSS</acronym> must be defined:" ], "id_hash": 5754700705504977385, "content_hash": 5754700705504977385, "location": "book.translate.xml:1821", "context": "", "note": "(itstool) path: sect1/para", "flags": "", "labels": [], "state": 100, "fuzzy": false, "translated": true, "approved": false, "position": 188, "has_suggestion": false, "has_comment": false, "has_failing_check": true, "num_words": 78, "source_unit": "https://translate-dev.freebsd.org/api/units/229389/?format=api", "priority": 100, "id": 229389, "web_url": "https://translate-dev.freebsd.org/translate/freebsd-doc/boooks_arch-handbook/en/?checksum=cfdccdcd4c5061e9", "url": "https://translate-dev.freebsd.org/api/units/229389/?format=api", "explanation": "", "extra_flags": "", "pending": false, "timestamp": "2021-01-09T14:37:12.689565Z" }, { "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/boooks_arch-handbook/en/?format=api", "source": [ "For this reason, no serious applications rely on block devices, and in fact, almost all applications which access disks directly take great pains to specify that character (or <quote>raw</quote>) devices should always be used. As the implementation of the aliasing of each disk (partition) to two devices with different semantics significantly complicated the relevant kernel code, FreeBSD dropped support for cached disk devices as part of the modernization of the disk I/O infrastructure." ], "previous_source": "", "target": [ "For this reason, no serious applications rely on block devices, and in fact, almost all applications which access disks directly take great pains to specify that character (or <quote>raw</quote>) devices should always be used. As the implementation of the aliasing of each disk (partition) to two devices with different semantics significantly complicated the relevant kernel code, FreeBSD dropped support for cached disk devices as part of the modernization of the disk I/O infrastructure." ], "id_hash": -2770740314132742407, "content_hash": -2770740314132742407, "location": "book.translate.xml:16461", "context": "", "note": "(itstool) path: sect1/para", "flags": "", "labels": [], "state": 100, "fuzzy": false, "translated": true, "approved": false, "position": 1714, "has_suggestion": false, "has_comment": false, "has_failing_check": true, "num_words": 73, "source_unit": "https://translate-dev.freebsd.org/api/units/229390/?format=api", "priority": 100, "id": 229390, "web_url": "https://translate-dev.freebsd.org/translate/freebsd-doc/boooks_arch-handbook/en/?checksum=598c5a5d43437ef9", "url": "https://translate-dev.freebsd.org/api/units/229390/?format=api", "explanation": "", "extra_flags": "", "pending": false, "timestamp": "2021-01-09T14:37:15.173398Z" }, { "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/boooks_arch-handbook/en/?format=api", "source": [ "As the PnP devices are disabled when probing the legacy devices they will not be attached twice (once as legacy and once as PnP). But in case of device-dependent identify routines it is the responsibility of the driver to make sure that the same device will not be attached by the driver twice: once as legacy user-configured and once as auto-identified." ], "previous_source": "", "target": [ "As the PnP devices are disabled when probing the legacy devices they will not be attached twice (once as legacy and once as PnP). But in case of device-dependent identify routines it is the responsibility of the driver to make sure that the same device will not be attached by the driver twice: once as legacy user-configured and once as auto-identified." ], "id_hash": 651447676183407919, "content_hash": 651447676183407919, "location": "book.translate.xml:16866", "context": "", "note": "(itstool) path: sect1/para", "flags": "", "labels": [], "state": 100, "fuzzy": false, "translated": true, "approved": false, "position": 1791, "has_suggestion": false, "has_comment": false, "has_failing_check": true, "num_words": 61, "source_unit": "https://translate-dev.freebsd.org/api/units/229391/?format=api", "priority": 100, "id": 229391, "web_url": "https://translate-dev.freebsd.org/translate/freebsd-doc/boooks_arch-handbook/en/?checksum=890a6835c0aa6d2f", "url": "https://translate-dev.freebsd.org/api/units/229391/?format=api", "explanation": "", "extra_flags": "", "pending": false, "timestamp": "2021-01-09T14:37:15.342962Z" }, { "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/boooks_arch-handbook/en/?format=api", "source": [ "Free the memory allocated by <function>bus_dmamem_alloc()</function>. At present, freeing of the memory allocated with ISA restrictions is not implemented. Due to this the recommended model of use is to keep and re-use the allocated areas for as long as possible. Do not lightly free some area and then shortly allocate it again. That does not mean that <function>bus_dmamem_free()</function> should not be used at all: hopefully it will be properly implemented soon." ], "previous_source": "", "target": [ "Free the memory allocated by <function>bus_dmamem_alloc()</function>. At present, freeing of the memory allocated with ISA restrictions is not implemented. Due to this the recommended model of use is to keep and re-use the allocated areas for as long as possible. Do not lightly free some area and then shortly allocate it again. That does not mean that <function>bus_dmamem_free()</function> should not be used at all: hopefully it will be properly implemented soon." ], "id_hash": -7771074710491260305, "content_hash": -7771074710491260305, "location": "book.translate.xml:17506", "context": "", "note": "(itstool) path: listitem/para", "flags": "", "labels": [], "state": 100, "fuzzy": false, "translated": true, "approved": false, "position": 1897, "has_suggestion": false, "has_comment": false, "has_failing_check": true, "num_words": 71, "source_unit": "https://translate-dev.freebsd.org/api/units/229392/?format=api", "priority": 100, "id": 229392, "web_url": "https://translate-dev.freebsd.org/translate/freebsd-doc/boooks_arch-handbook/en/?checksum=142798b946259a6f", "url": "https://translate-dev.freebsd.org/api/units/229392/?format=api", "explanation": "", "extra_flags": "", "pending": false, "timestamp": "2021-01-09T14:37:15.568101Z" }, { "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/boooks_arch-handbook/en/?format=api", "source": [ "Before calling the callback function from <function>bus_dmamap_load()</function> the segment array is stored in the stack. And it gets pre-allocated for the maximal number of segments allowed by the tag. As a result of this the practical limit for the number of segments on i386 architecture is about 250-300 (the kernel stack is 4KB minus the size of the user structure, size of a segment array entry is 8 bytes, and some space must be left). Since the array is allocated based on the maximal number this value must not be set higher than really needed. Fortunately, for most of hardware the maximal supported number of segments is much lower. But if the driver wants to handle buffers with a very large number of scatter-gather segments it should do that in portions: load part of the buffer, transfer it to the device, load next part of the buffer, and so on." ], "previous_source": "", "target": [ "Before calling the callback function from <function>bus_dmamap_load()</function> the segment array is stored in the stack. And it gets pre-allocated for the maximal number of segments allowed by the tag. As a result of this the practical limit for the number of segments on i386 architecture is about 250-300 (the kernel stack is 4KB minus the size of the user structure, size of a segment array entry is 8 bytes, and some space must be left). Since the array is allocated based on the maximal number this value must not be set higher than really needed. Fortunately, for most of hardware the maximal supported number of segments is much lower. But if the driver wants to handle buffers with a very large number of scatter-gather segments it should do that in portions: load part of the buffer, transfer it to the device, load next part of the buffer, and so on." ], "id_hash": 5944484303631366233, "content_hash": 5944484303631366233, "location": "book.translate.xml:17809", "context": "", "note": "(itstool) path: sect1/para", "flags": "", "labels": [], "state": 100, "fuzzy": false, "translated": true, "approved": false, "position": 1935, "has_suggestion": false, "has_comment": false, "has_failing_check": true, "num_words": 150, "source_unit": "https://translate-dev.freebsd.org/api/units/229393/?format=api", "priority": 100, "id": 229393, "web_url": "https://translate-dev.freebsd.org/translate/freebsd-doc/boooks_arch-handbook/en/?checksum=d27f0cfa9ad53859", "url": "https://translate-dev.freebsd.org/api/units/229393/?format=api", "explanation": "", "extra_flags": "", "pending": false, "timestamp": "2021-01-09T14:37:15.706802Z" }, { "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/boooks_arch-handbook/en/?format=api", "source": [ "Then allocate and activate all the necessary resources. As normally the port range will be released before returning from probe, it has to be allocated again. We expect that the probe routine had properly set all the resource ranges, as well as saved them in the structure softc. If the probe routine had left some resource allocated then it does not need to be allocated again (which would be considered an error)." ], "previous_source": "", "target": [ "Then allocate and activate all the necessary resources. As normally the port range will be released before returning from probe, it has to be allocated again. We expect that the probe routine had properly set all the resource ranges, as well as saved them in the structure softc. If the probe routine had left some resource allocated then it does not need to be allocated again (which would be considered an error)." ], "id_hash": -5461918463108398047, "content_hash": -5461918463108398047, "location": "book.translate.xml:18682", "context": "", "note": "(itstool) path: sect1/para", "flags": "", "labels": [], "state": 100, "fuzzy": false, "translated": true, "approved": false, "position": 2026, "has_suggestion": false, "has_comment": false, "has_failing_check": true, "num_words": 72, "source_unit": "https://translate-dev.freebsd.org/api/units/229394/?format=api", "priority": 100, "id": 229394, "web_url": "https://translate-dev.freebsd.org/translate/freebsd-doc/boooks_arch-handbook/en/?checksum=34335e18a646c421", "url": "https://translate-dev.freebsd.org/api/units/229394/?format=api", "explanation": "", "extra_flags": "", "pending": false, "timestamp": "2021-01-09T14:37:15.899079Z" }, { "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/boooks_arch-handbook/en/?format=api", "source": [ "As we are interested in writing a SCSI adapter driver here, from this point on we will consider everything from the SIM standpoint." ], "previous_source": "", "target": [ "As we are interested in writing a SCSI adapter driver here, from this point on we will consider everything from the SIM standpoint." ], "id_hash": -3885103319677610175, "content_hash": -3885103319677610175, "location": "book.translate.xml:19566", "context": "", "note": "(itstool) path: sect1/para", "flags": "", "labels": [], "state": 100, "fuzzy": false, "translated": true, "approved": false, "position": 2124, "has_suggestion": false, "has_comment": false, "has_failing_check": true, "num_words": 23, "source_unit": "https://translate-dev.freebsd.org/api/units/229395/?format=api", "priority": 100, "id": 229395, "web_url": "https://translate-dev.freebsd.org/translate/freebsd-doc/boooks_arch-handbook/en/?checksum=4a15571d6aecd741", "url": "https://translate-dev.freebsd.org/api/units/229395/?format=api", "explanation": "", "extra_flags": "", "pending": false, "timestamp": "2021-01-09T14:37:16.107797Z" }, { "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/boooks_arch-handbook/en/?format=api", "source": [ "If the CCB is being transferred right now we would like to signal to the SCSI controller in some hardware-dependent way that we want to abort the current transfer. The SCSI controller would set the SCSI ATTENTION signal and when the target responds to it send an ABORT message. We also reset the timeout to make sure that the target is not sleeping forever. If the command would not get aborted in some reasonable time like 10 seconds the timeout routine would go ahead and reset the whole SCSI bus. Since the command will be aborted in some reasonable time we can just return the abort request now as successfully completed, and mark the aborted CCB as aborted (but not mark it as done yet)." ], "previous_source": "", "target": [ "If the CCB is being transferred right now we would like to signal to the SCSI controller in some hardware-dependent way that we want to abort the current transfer. The SCSI controller would set the SCSI ATTENTION signal and when the target responds to it send an ABORT message. We also reset the timeout to make sure that the target is not sleeping forever. If the command would not get aborted in some reasonable time like 10 seconds the timeout routine would go ahead and reset the whole SCSI bus. Since the command will be aborted in some reasonable time we can just return the abort request now as successfully completed, and mark the aborted CCB as aborted (but not mark it as done yet)." ], "id_hash": -2897232973491234230, "content_hash": -2897232973491234230, "location": "book.translate.xml:20531", "context": "", "note": "(itstool) path: listitem/para", "flags": "", "labels": [], "state": 100, "fuzzy": false, "translated": true, "approved": false, "position": 2254, "has_suggestion": false, "has_comment": false, "has_failing_check": true, "num_words": 125, "source_unit": "https://translate-dev.freebsd.org/api/units/229396/?format=api", "priority": 100, "id": 229396, "web_url": "https://translate-dev.freebsd.org/translate/freebsd-doc/boooks_arch-handbook/en/?checksum=57caf5f5f7819a4a", "url": "https://translate-dev.freebsd.org/api/units/229396/?format=api", "explanation": "", "extra_flags": "", "pending": false, "timestamp": "2021-01-09T14:37:16.439445Z" }, { "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/boooks_arch-handbook/en/?format=api", "source": [ "That is all for the ABORT request, although there is one more issue. As the ABORT message cleans all the ongoing transactions on a LUN we have to mark all the other active transactions on this LUN as aborted. That should be done in the interrupt routine, after the transaction gets aborted." ], "previous_source": "", "target": [ "That is all for the ABORT request, although there is one more issue. As the ABORT message cleans all the ongoing transactions on a LUN we have to mark all the other active transactions on this LUN as aborted. That should be done in the interrupt routine, after the transaction gets aborted." ], "id_hash": -3249575469728956370, "content_hash": -3249575469728956370, "location": "book.translate.xml:20578", "context": "", "note": "(itstool) path: listitem/para", "flags": "", "labels": [], "state": 100, "fuzzy": false, "translated": true, "approved": false, "position": 2258, "has_suggestion": false, "has_comment": false, "has_failing_check": true, "num_words": 52, "source_unit": "https://translate-dev.freebsd.org/api/units/229397/?format=api", "priority": 100, "id": 229397, "web_url": "https://translate-dev.freebsd.org/translate/freebsd-doc/boooks_arch-handbook/en/?checksum=52e73053c7fb802e", "url": "https://translate-dev.freebsd.org/api/units/229397/?format=api", "explanation": "", "extra_flags": "", "pending": false, "timestamp": "2021-01-09T14:37:16.601650Z" }, { "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/boooks_arch-handbook/en/?format=api", "source": [ "The poll function is used to simulate the interrupts when the interrupt subsystem is not functioning (for example, when the system has crashed and is creating the system dump). The CAM subsystem sets the proper interrupt level before calling the poll routine. So all it needs to do is to call the interrupt routine (or the other way around, the poll routine may be doing the real action and the interrupt routine would just call the poll routine). Why bother about a separate function then? Due to different calling conventions. The <function>xxx_poll</function> routine gets the struct cam_sim pointer as its argument when the PCI interrupt routine by common convention gets pointer to the struct <varname remap=\"structname\">xxx_softc</varname> and the ISA interrupt routine gets just the device unit number. So the poll routine would normally look as:" ], "previous_source": "", "target": [ "The poll function is used to simulate the interrupts when the interrupt subsystem is not functioning (for example, when the system has crashed and is creating the system dump). The CAM subsystem sets the proper interrupt level before calling the poll routine. So all it needs to do is to call the interrupt routine (or the other way around, the poll routine may be doing the real action and the interrupt routine would just call the poll routine). Why bother about a separate function then? Due to different calling conventions. The <function>xxx_poll</function> routine gets the struct cam_sim pointer as its argument when the PCI interrupt routine by common convention gets pointer to the struct <varname remap=\"structname\">xxx_softc</varname> and the ISA interrupt routine gets just the device unit number. So the poll routine would normally look as:" ], "id_hash": -3525007900071779886, "content_hash": -3525007900071779886, "location": "book.translate.xml:21089", "context": "", "note": "(itstool) path: sect1/para", "flags": "", "labels": [], "state": 100, "fuzzy": false, "translated": true, "approved": false, "position": 2336, "has_suggestion": false, "has_comment": false, "has_failing_check": true, "num_words": 135, "source_unit": "https://translate-dev.freebsd.org/api/units/229398/?format=api", "priority": 100, "id": 229398, "web_url": "https://translate-dev.freebsd.org/translate/freebsd-doc/boooks_arch-handbook/en/?checksum=4f14a7fdbdc6a1d2", "url": "https://translate-dev.freebsd.org/api/units/229398/?format=api", "explanation": "", "extra_flags": "", "pending": false, "timestamp": "2021-01-09T14:37:16.757392Z" }, { "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/boooks_arch-handbook/en/?format=api", "source": [ "Example: Firmware download Many devices that have been developed are based on a general purpose processor with an additional USB core added to it. Since the development of drivers and firmware for USB devices is still very new, many devices require the downloading of the firmware after they have been connected." ], "previous_source": "", "target": [ "Example: Firmware download Many devices that have been developed are based on a general purpose processor with an additional USB core added to it. Since the development of drivers and firmware for USB devices is still very new, many devices require the downloading of the firmware after they have been connected." ], "id_hash": -2354564052656662415, "content_hash": -2354564052656662415, "location": "book.translate.xml:22363", "context": "", "note": "(itstool) path: sect1/para", "flags": "", "labels": [], "state": 100, "fuzzy": false, "translated": true, "approved": false, "position": 2480, "has_suggestion": false, "has_comment": false, "has_failing_check": true, "num_words": 51, "source_unit": "https://translate-dev.freebsd.org/api/units/229399/?format=api", "priority": 100, "id": 229399, "web_url": "https://translate-dev.freebsd.org/translate/freebsd-doc/boooks_arch-handbook/en/?checksum=5f52e878187ed871", "url": "https://translate-dev.freebsd.org/api/units/229399/?format=api", "explanation": "", "extra_flags": "", "pending": false, "timestamp": "2021-01-09T14:37:17.023428Z" }, { "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/boooks_arch-handbook/en/?format=api", "source": [ "Due to this practice, FreeBSD drivers usually rely on numeric IDs for device identification. Using numeric IDs and a centralized database complicates adding IDs and support for cards to the system. One must carefully check to see who really made the card, especially when it appears that the vendor who made the card might already have a different manufacturer ID listed in the central database. Linksys, D-Link, and NetGear are a number of US manufacturers of LAN hardware that often sell the same design. These same designs can be sold in Japan under names such as Buffalo and Corega. Often, these devices will all have the same manufacturer and product IDs." ], "previous_source": "", "target": [ "Due to this practice, FreeBSD drivers usually rely on numeric IDs for device identification. Using numeric IDs and a centralized database complicates adding IDs and support for cards to the system. One must carefully check to see who really made the card, especially when it appears that the vendor who made the card might already have a different manufacturer ID listed in the central database. Linksys, D-Link, and NetGear are a number of US manufacturers of LAN hardware that often sell the same design. These same designs can be sold in Japan under names such as Buffalo and Corega. Often, these devices will all have the same manufacturer and product IDs." ], "id_hash": 2257468920577724449, "content_hash": 2257468920577724449, "location": "book.translate.xml:23559", "context": "", "note": "(itstool) path: sect2/para", "flags": "", "labels": [], "state": 100, "fuzzy": false, "translated": true, "approved": false, "position": 2675, "has_suggestion": false, "has_comment": false, "has_failing_check": true, "num_words": 111, "source_unit": "https://translate-dev.freebsd.org/api/units/229400/?format=api", "priority": 100, "id": 229400, "web_url": "https://translate-dev.freebsd.org/translate/freebsd-doc/boooks_arch-handbook/en/?checksum=9f542405ce851021", "url": "https://translate-dev.freebsd.org/api/units/229400/?format=api", "explanation": "", "extra_flags": "", "pending": false, "timestamp": "2021-01-09T14:37:17.385078Z" } ] }{ "count": 2721, "next": null, "previous": "