diff --git a/Documentation/boards/stm32mp.rst b/Documentation/boards/stm32mp.rst index 24cf885..774ede6 100644 --- a/Documentation/boards/stm32mp.rst +++ b/Documentation/boards/stm32mp.rst @@ -60,6 +60,10 @@ image = "barebox-@STM32MP_BOARD@.img" size = 1M } + partition barebox-environment { + image = "/dev/null" + size = 1M + } } Image can then be flashed on e.g. a SD-Card. diff --git a/Documentation/gen_commands.py b/Documentation/gen_commands.py index 6251b4f..203a39b 100755 --- a/Documentation/gen_commands.py +++ b/Documentation/gen_commands.py @@ -1,5 +1,7 @@ #!/usr/bin/python +from __future__ import print_function + import errno import os import re @@ -28,10 +30,15 @@ CMDS = {} +def string_escape(s): + # This used to do s.decode("string_escape") which isn't available on Python 3. + # Actually we only need to drop '\t' and '\n', so do this here. + return s.replace(r'\t', '').replace(r'\n', '') + def parse_c(name): cmd = None last = None - for line in file(name, 'r'): + for line in open(name, 'r'): x = HELP_START.match(line) if x: cmd = CMDS.setdefault(x.group(1), defaultdict(list)) @@ -50,14 +57,14 @@ last = cmd['h_pre'] else: last = cmd['h_post'] - last.append(x.group(1).decode("string_escape").strip()) + last.append(string_escape(x.group(1)).strip()) continue x = HELP_OPT.match(line) if x: last = cmd['h_opts'] last.append([ - x.group(1).decode("string_escape"), - x.group(2).decode("string_escape") + string_escape(x.group(1)), + string_escape(x.group(2)), ]) continue x = CMD_FUNC.match(line) @@ -68,12 +75,12 @@ x = CMD_DESC.match(line) if x: last = cmd['c_desc'] - last.append(x.group(1).decode("string_escape")) + last.append(string_escape(x.group(1))) continue x = CMD_OPTS.match(line) if x: last = cmd['c_opts'] - last.append(x.group(1).decode("string_escape")) + last.append(string_escape(x.group(1))) continue x = CMD_GROUP.match(line) if x: @@ -85,9 +92,9 @@ if last is None: raise Exception("Parse error in %s: %r" % (name, line)) if isinstance(last[-1], str): - last[-1] += x.group(1).decode("string_escape") + last[-1] += string_escape(x.group(1)) elif isinstance(last[-1], list): - last[-1][1] += x.group(1).decode("string_escape") + last[-1][1] += string_escape(x.group(1)) continue x = HELP_END.match(line) if x: @@ -163,7 +170,7 @@ rst = gen_rst(name, cmd) group = cmd.get('c_group') if group is None: - print >> sys.stderr, "gen_commands: warning: using default group 'misc' for command '%s'" % name + print("gen_commands: warning: using default group 'misc' for command '%s'" % name, file=sys.stderr) group = ['misc'] subdir = os.path.join(sys.argv[2], group[0]) try: @@ -183,9 +190,8 @@ except: pass hash_new = hashlib.sha1() - hash_new.update(rst) + hash_new.update(rst.encode('utf-8')) if hash_old.hexdigest() == hash_new.hexdigest(): continue - file(target, 'w').write(rst) - + open(target, 'w').write(rst) diff --git a/arch/arm/boards/chumby_falconwing/falconwing.c b/arch/arm/boards/chumby_falconwing/falconwing.c index 5554b78..fb4a5d1 100644 --- a/arch/arm/boards/chumby_falconwing/falconwing.c +++ b/arch/arm/boards/chumby_falconwing/falconwing.c @@ -65,7 +65,7 @@ .xres = 320, .yres = 240, .pixclock = KHZ2PICOS(6250), /* max. 10 MHz */ - /* line lenght should be 64 �s */ + /* line length should be 64 µs */ .left_margin = 28, .hsync_len = 24, .right_margin = 28, diff --git a/arch/arm/boards/phytec-som-am335x/board.c b/arch/arm/boards/phytec-som-am335x/board.c index 441d563..c25f33a 100644 --- a/arch/arm/boards/phytec-som-am335x/board.c +++ b/arch/arm/boards/phytec-som-am335x/board.c @@ -124,15 +124,11 @@ ARRAY_SIZE(nandslots)); am33xx_bbu_emmc_mlo_register_handler("MLO.emmc", "/dev/mmc1"); - if (IS_ENABLED(CONFIG_STATE)) { - state = state_by_name("am335x_phytec_mac_state"); - if (state) - for (state_i = 0; state_i < 2; state_i++) { - state_ret = state_read_mac(state, - eth_names[state_i], &mac[0]); - if (!state_ret && is_valid_ether_addr(&mac[0])) - eth_register_ethaddr(state_i, mac); - } + state = state_by_name("am335x_phytec_mac_state"); + for (state_i = 0; state_i < 2; state_i++) { + state_ret = state_read_mac(state, eth_names[state_i], &mac[0]); + if (!state_ret && is_valid_ether_addr(&mac[0])) + eth_register_ethaddr(state_i, mac); } if (IS_ENABLED(CONFIG_PHYTEC_SOM_AM335X_OF_AUTOENABLE)) { diff --git a/arch/arm/boards/stm32mp157c-dk2/board.c b/arch/arm/boards/stm32mp157c-dk2/board.c index cbfe21d..9cb861a 100644 --- a/arch/arm/boards/stm32mp157c-dk2/board.c +++ b/arch/arm/boards/stm32mp157c-dk2/board.c @@ -5,7 +5,7 @@ #include #include -static int dk2_postcore_init(void) +static int dk2_mem_init(void) { if (!of_machine_is_compatible("st,stm32mp157c-dk2")) return 0; @@ -14,4 +14,4 @@ return 0; } -mem_initcall(dk2_postcore_init); +mem_initcall(dk2_mem_init); diff --git a/arch/arm/dts/stm32mp157a-dk1.dtsi b/arch/arm/dts/stm32mp157a-dk1.dtsi index cd3d614..f7fbdcd 100644 --- a/arch/arm/dts/stm32mp157a-dk1.dtsi +++ b/arch/arm/dts/stm32mp157a-dk1.dtsi @@ -8,6 +8,13 @@ #include / { + chosen { + environment { + compatible = "barebox,environment"; + device-path = &sdmmc1, "partname:barebox-environment"; + }; + }; + led { red { label = "error"; diff --git a/arch/arm/mach-samsung/mem-s3c64xx.c b/arch/arm/mach-samsung/mem-s3c64xx.c index aca2cf5..c51245a 100644 --- a/arch/arm/mach-samsung/mem-s3c64xx.c +++ b/arch/arm/mach-samsung/mem-s3c64xx.c @@ -39,7 +39,7 @@ tacs = DIV_ROUND_UP(c->adr_setup_t, per_t); /* start of CS to read/write assertion (= access setup) */ tcos = DIV_ROUND_UP(c->access_setup_t, per_t); - /* length of read/write assertion (= access lenght) */ + /* length of read/write assertion (= access length) */ tacc = DIV_ROUND_UP(c->access_t, per_t) - 1; /* CS hold after access is finished */ tcoh = DIV_ROUND_UP(c->cs_hold_t, per_t); diff --git a/arch/mips/dts/ar9331-dptechnics-dpt-module.dts b/arch/mips/dts/ar9331-dptechnics-dpt-module.dts index 315589a..cbaf5ab 100644 --- a/arch/mips/dts/ar9331-dptechnics-dpt-module.dts +++ b/arch/mips/dts/ar9331-dptechnics-dpt-module.dts @@ -15,7 +15,7 @@ art@0 { compatible = "qca,art-ar9331", "qca,art"; device-path = &spiflash_art; - barebox,provide-mac-address = <&mac0>; + barebox,provide-mac-address = <ð0>; }; }; @@ -48,7 +48,3 @@ reg = <0x7f0000 0x10000>; }; }; - -&mac0 { - status = "okay"; -}; diff --git a/arch/mips/dts/ar9331.dtsi b/arch/mips/dts/ar9331.dtsi index 42baae1..72f0297 100644 --- a/arch/mips/dts/ar9331.dtsi +++ b/arch/mips/dts/ar9331.dtsi @@ -5,14 +5,11 @@ reg = <0x18060008 0x8>; clocks = <&pll ATH79_CLK_CPU>; }; - - mac0: mac@19000000 { - compatible = "qca,ar9331-ge0"; - reg = <0x18070000 0x00000100>, - <0x19000000 0x01000000>; - reg-names = "gmac", "ge0"; - phy-mode = "mii"; - status = "disabled"; - }; }; }; + +ð0 { + reg = <0x19000000 0x200>, + <0x18070000 0x00000100>; + reg-names = "ge0", "gmac"; +}; diff --git a/arch/mips/dts/tplink-mr3020.dts b/arch/mips/dts/tplink-mr3020.dts index e30eae1..c6ae154 100644 --- a/arch/mips/dts/tplink-mr3020.dts +++ b/arch/mips/dts/tplink-mr3020.dts @@ -28,6 +28,6 @@ }; }; -&mac0 { +ð0 { status = "okay"; }; diff --git a/commands/Kconfig b/commands/Kconfig index e03110f..6847a55 100644 --- a/commands/Kconfig +++ b/commands/Kconfig @@ -2144,7 +2144,7 @@ config CMD_UBSAN tristate "ubsan" - depends on UBSAN && COMMAND_SUPPORT + depends on UBSAN help This is a test command for the undefined behavior sanitizer. It triggers various undefined behavior, and detect it. diff --git a/common/blspec.c b/common/blspec.c index 66e5033..83b0599 100644 --- a/common/blspec.c +++ b/common/blspec.c @@ -229,6 +229,14 @@ } /* + * is_blspec_entry - check if a bootentry is a blspec entry + */ +static inline bool is_blspec_entry(struct bootentry *entry) +{ + return entry->boot == blspec_boot; +} + +/* * blspec_have_entry - check if we already have an entry with * a certain path */ @@ -238,6 +246,8 @@ struct blspec_entry *e; list_for_each_entry(be, &bootentries->entries, list) { + if (!is_blspec_entry(be)) + continue; e = container_of(be, struct blspec_entry, entry); if (e->configpath && !strcmp(e->configpath, path)) return 1; diff --git a/common/console.c b/common/console.c index d04aae5..e6e0298 100644 --- a/common/console.c +++ b/common/console.c @@ -272,6 +272,9 @@ { struct console_device *priv = cdev->priv; + if ((flags & (O_WRONLY | O_RDWR)) && !priv->puts ) + return -EPERM; + return console_open(priv); } diff --git a/common/imd.c b/common/imd.c index 05e118e..913a01d 100644 --- a/common/imd.c +++ b/common/imd.c @@ -337,8 +337,10 @@ return -errno; imd_start = imd_get(buf, size); - if (IS_ERR(imd_start)) - return PTR_ERR(imd_start); + if (IS_ERR(imd_start)) { + ret = PTR_ERR(imd_start); + goto out; + } if (type == IMD_TYPE_INVALID) { imd_for_each(imd_start, imd) { @@ -356,7 +358,8 @@ imd = imd_find_type(imd_start, type); if (!imd) { debug("No tag of type 0x%08x found\n", type); - return -ENODATA; + ret = -ENODATA; + goto out; } if (imd_is_string(type)) { @@ -370,8 +373,10 @@ str = imd_concat_strings(imd); } - if (!str) - return -ENODATA; + if (!str) { + ret = -ENODATA; + goto out; + } if (variable_name) imd_command_setenv(variable_name, str); @@ -384,5 +389,8 @@ } } - return 0; + ret = 0; +out: + free(buf); + return ret; } diff --git a/common/partitions/efi.c b/common/partitions/efi.c index 3c1077f..f20fd0d 100644 --- a/common/partitions/efi.c +++ b/common/partitions/efi.c @@ -369,7 +369,7 @@ lastlba = last_lba(blk); if (force_gpt) { /* This will be added to the EFI Spec. per Intel after v1.02. */ - if (file_detect_type(buf, SECTOR_SIZE * 2) != filetype_gpt) + if (file_detect_partition_table(buf, SECTOR_SIZE * 2) != filetype_gpt) goto fail; } diff --git a/common/state/backend_bucket_circular.c b/common/state/backend_bucket_circular.c index 47970b7..735510e 100644 --- a/common/state/backend_bucket_circular.c +++ b/common/state/backend_bucket_circular.c @@ -178,10 +178,10 @@ if (ret < 0) { dev_err(circ->dev, "Failed to read circular storage len %d, %d\n", len, ret); - free(buf); + return ret; } - return ret; + return 0; } static int state_mtd_peb_write(struct state_backend_storage_bucket_circular *circ, diff --git a/common/state/backend_bucket_direct.c b/common/state/backend_bucket_direct.c index 0dbd334..4522f01 100644 --- a/common/state/backend_bucket_direct.c +++ b/common/state/backend_bucket_direct.c @@ -115,9 +115,6 @@ int ret; struct state_backend_storage_bucket_direct_meta meta; - if (len > direct->max_size - sizeof(meta)) - return -E2BIG; - if (lseek(direct->fd, direct->offset, SEEK_SET) != direct->offset) { dev_err(direct->dev, "Failed to seek file, %d\n", -errno); return -errno; diff --git a/common/state/state.c b/common/state/state.c index 3f5d43e..b168387 100644 --- a/common/state/state.c +++ b/common/state/state.c @@ -714,13 +714,6 @@ return NULL; } -int state_get_name(const struct state *state, char const **name) -{ - *name = xstrdup(state->name); - - return 0; -} - int state_read_mac(struct state *state, const char *name, u8 *buf) { struct state_variable *svar; diff --git a/drivers/base/regmap/regmap.c b/drivers/base/regmap/regmap.c index d2f8ec7..dc7b4f2 100644 --- a/drivers/base/regmap/regmap.c +++ b/drivers/base/regmap/regmap.c @@ -65,7 +65,7 @@ } /* - * regmap_init - initialize and register a regmap + * dev_get_regmap - get a regmap from a device * * @dev: The device the maps is attached to * @name: Optional name for the map. If given it must match. @@ -406,4 +406,4 @@ } free(map); -} \ No newline at end of file +} diff --git a/drivers/input/input.c b/drivers/input/input.c index 14e44d1..1e8f6e1 100644 --- a/drivers/input/input.c +++ b/drivers/input/input.c @@ -195,6 +195,8 @@ ic->console.tstc = input_console_tstc; ic->console.getc = input_console_getc; ic->console.f_active = CONSOLE_STDIN; + ic->console.devid = DEVICE_ID_DYNAMIC; + ic->console.devname = "input"; ic->fifo = kfifo_alloc(32); ic->notifier.notify = input_console_notify; diff --git a/drivers/mfd/Kconfig b/drivers/mfd/Kconfig index 7d924cf..f4cc71e 100644 --- a/drivers/mfd/Kconfig +++ b/drivers/mfd/Kconfig @@ -67,4 +67,19 @@ help Select this to support communication with the STPMIC1. +config MFD_SUPERIO + bool + +config FINTEK_SUPERIO + bool "Fintek Super I/O chip" + select MFD_SUPERIO + help + Select this to probe for IO-port connected Fintek Super I/O chips. + +config SMSC_SUPERIO + bool "SMSC Super I/O chip" + select MFD_SUPERIO + help + Select this to probe for IO-port connected SMSC Super I/O chips. + endmenu diff --git a/drivers/mfd/Makefile b/drivers/mfd/Makefile index 16a74ab..0c24493 100644 --- a/drivers/mfd/Makefile +++ b/drivers/mfd/Makefile @@ -12,3 +12,6 @@ obj-$(CONFIG_MFD_TWL6030) += twl6030.o obj-$(CONFIG_RAVE_SP_CORE) += rave-sp.o obj-$(CONFIG_MFD_STPMIC1) += stpmic1.o +obj-$(CONFIG_MFD_SUPERIO) += superio.o +obj-$(CONFIG_FINTEK_SUPERIO) += fintek-superio.o +obj-$(CONFIG_SMSC_SUPERIO) += smsc-superio.o diff --git a/drivers/mfd/da9063.c b/drivers/mfd/da9063.c index 5f77e59..b61e764 100644 --- a/drivers/mfd/da9063.c +++ b/drivers/mfd/da9063.c @@ -15,8 +15,10 @@ #include #include +#include #include #include +#include #include #include #include @@ -25,6 +27,7 @@ struct da9063 { struct restart_handler restart; struct watchdog wd; + struct gpio_chip gpio; struct i2c_client *client; /* dummy client for accessing bank #1 */ struct i2c_client *client1; @@ -61,6 +64,19 @@ /* DA9063_REG_CONTROL_I (addr=0x10e) */ #define DA9062_WATCHDOG_SD BIT(3) +#define DA9062AA_STATUS_B 0x002 +#define DA9062AA_GPIO_0_1 0x015 +#define DA9062AA_GPIO_MODE0_4 0x01D + +/* DA9062AA_GPIO_0_1 (addr=0x015) */ +#define DA9062AA_GPIO0_PIN_MASK 0x03 + +#define DA9062_PIN_SHIFT(offset) (4 * (offset % 2)) +#define DA9062_PIN_ALTERNATE 0x00 /* gpio alternate mode */ +#define DA9062_PIN_GPI 0x01 /* gpio in */ +#define DA9062_PIN_GPO_OD 0x02 /* gpio out open-drain */ +#define DA9062_PIN_GPO_PP 0x03 /* gpio out push-pull */ + struct da906x_device_data { int (*init)(struct da9063 *priv); }; @@ -104,6 +120,118 @@ return 0; } +static inline struct da9063 *to_da9063(struct gpio_chip *chip) +{ + return container_of(chip, struct da9063, gpio); +} + +static int da9063_gpio_direction_input(struct gpio_chip *chip, unsigned offset) +{ + struct da9063 *priv = to_da9063(chip); + u8 mask, mode; + + mode = DA9062_PIN_GPI << DA9062_PIN_SHIFT(offset); + mask = DA9062AA_GPIO0_PIN_MASK << DA9062_PIN_SHIFT(offset); + + return da906x_reg_update(priv, DA9062AA_GPIO_0_1 + (offset >> 1), + mask, mode); +} + +static int da9063_gpio_direction_output(struct gpio_chip *chip, unsigned offset, + int value) +{ + struct da9063 *priv = to_da9063(chip); + + return da906x_reg_update(priv, DA9062AA_GPIO_MODE0_4, BIT(offset), + value << offset); +} + +static int da9063_gpio_get_pin_mode(struct da9063 *priv, unsigned offset) +{ + int ret; + u8 val; + + ret = i2c_read_reg(priv->client, DA9062AA_GPIO_0_1 + (offset >> 1), + &val, 1); + if (ret < 0) + return ret; + + val >>= DA9062_PIN_SHIFT(offset); + val &= DA9062AA_GPIO0_PIN_MASK; + + return val; +} + +static int da9063_gpio_get(struct gpio_chip *chip, unsigned offset) +{ + struct da9063 *priv = to_da9063(chip); + int gpio_dir; + int ret; + u8 val; + + gpio_dir = da9063_gpio_get_pin_mode(priv, offset); + if (gpio_dir < 0) + return gpio_dir; + + switch (gpio_dir) { + case DA9062_PIN_ALTERNATE: + return -ENOTSUPP; + case DA9062_PIN_GPI: + ret = i2c_read_reg(priv->client, DA9062AA_STATUS_B, &val, 1); + if (ret < 0) + return ret; + break; + case DA9062_PIN_GPO_OD: + /* falltrough */ + case DA9062_PIN_GPO_PP: + ret = i2c_read_reg(priv->client, DA9062AA_GPIO_MODE0_4, &val, 1); + if (ret < 0) + return ret; + } + + return val & BIT(offset); +} + +static int da9063_gpio_get_direction(struct gpio_chip *chip, unsigned offset) +{ + struct da9063 *priv = to_da9063(chip); + int gpio_dir; + + gpio_dir = da9063_gpio_get_pin_mode(priv, offset); + if (gpio_dir < 0) + return gpio_dir; + + switch (gpio_dir) { + case DA9062_PIN_ALTERNATE: + return -ENOTSUPP; + case DA9062_PIN_GPI: + return 1; + case DA9062_PIN_GPO_OD: + /* falltrough */ + case DA9062_PIN_GPO_PP: + return 0; + } + + return -EINVAL; +} + +static void da9063_gpio_set(struct gpio_chip *chip, unsigned offset, int value) +{ + struct da9063 *priv = to_da9063(chip); + + da906x_reg_update(priv, DA9062AA_GPIO_MODE0_4, BIT(offset), + value << offset); + +} + +static struct gpio_ops da9063_gpio_ops = { + .direction_input = da9063_gpio_direction_input, + .direction_output = da9063_gpio_direction_output, + .get_direction = da9063_gpio_get_direction, + .get = da9063_gpio_get, + .set = da9063_gpio_set, +}; + static int da9063_watchdog_ping(struct da9063 *priv) { int ret; @@ -262,6 +390,17 @@ restart_handler_register(&priv->restart); + priv->gpio.base = -1; + priv->gpio.ngpio = 5; + priv->gpio.ops = &da9063_gpio_ops; + priv->gpio.dev = dev; + ret = gpiochip_add(&priv->gpio); + if (ret) + goto on_error; + + if (IS_ENABLED(CONFIG_OFDEVICE) && dev->device_node) + return of_platform_populate(dev->device_node, NULL, dev); + return 0; on_error: diff --git a/drivers/mfd/fintek-superio.c b/drivers/mfd/fintek-superio.c new file mode 100644 index 0000000..60785bc --- /dev/null +++ b/drivers/mfd/fintek-superio.c @@ -0,0 +1,122 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * Copyright (C) 2019 Ahmad Fatoum, Pengutronix + */ + +#define pr_fmt(fmt) "fintek-superio: " fmt + +#include +#include +#include +#include + +#define SIO_UNLOCK_KEY 0x87 /* Key to enable Super-I/O */ +#define SIO_LOCK_KEY 0xAA /* Key to disable Super-I/O */ + +#define SIO_REG_LDSEL 0x07 /* Logical device select */ + +#define SIO_FINTEK_ID 0x1934 /* Manufacturers ID */ + +#define SIO_F71808_ID 0x0901 +#define SIO_F71858_ID 0x0507 +#define SIO_F71862_ID 0x0601 +#define SIO_F71868_ID 0x1106 +#define SIO_F71869_ID 0x0814 +#define SIO_F71869A_ID 0x1007 +#define SIO_F71882_ID 0x0541 +#define SIO_F71889_ID 0x0723 +#define SIO_F71889A_ID 0x1005 +#define SIO_F81865_ID 0x0704 +#define SIO_F81866_ID 0x1010 + +static void superio_enter(u16 sioaddr) +{ + /* according to the datasheet the key must be sent twice! */ + outb(SIO_UNLOCK_KEY, sioaddr); + outb(SIO_UNLOCK_KEY, sioaddr); +} + +static void superio_exit(u16 sioaddr) +{ + outb(SIO_LOCK_KEY, sioaddr); +} + +static void fintek_superio_find(u16 sioaddr) +{ + struct superio_chip *chip; + u16 vid; + + superio_enter(sioaddr); + + vid = superio_inw(sioaddr, SIO_REG_MANID); + if (vid != SIO_FINTEK_ID) { + pr_debug("Not a Fintek device (port=0x%02x, vid=0x%04x)\n", + sioaddr, vid); + return; + } + + chip = xzalloc(sizeof(*chip)); + + chip->devid = superio_inw(sioaddr, SIO_REG_DEVID); + chip->vid = vid; + chip->sioaddr = sioaddr; + chip->enter = superio_enter; + chip->exit = superio_exit; + + superio_chip_add(chip); + + switch (chip->devid) { + case SIO_F71808_ID: + superio_func_add(chip, "f71808fg_wdt"); + break; + case SIO_F71862_ID: + superio_func_add(chip, "f71862fg_wdt"); + break; + case SIO_F71868_ID: + superio_func_add(chip, "f71868_wdt"); + break; + case SIO_F71869_ID: + superio_func_add(chip, "f71869_wdt"); + superio_func_add(chip, "gpio-f71869"); + break; + case SIO_F71869A_ID: + superio_func_add(chip, "f71869_wdt"); + superio_func_add(chip, "gpio-f71869a"); + break; + case SIO_F71882_ID: + superio_func_add(chip, "f71882fg_wdt"); + superio_func_add(chip, "gpio-f71882fg"); + break; + case SIO_F71889_ID: + superio_func_add(chip, "f71889fg_wdt"); + superio_func_add(chip, "gpio-f71889f"); + break; + case SIO_F71889A_ID: + superio_func_add(chip, "f71889fg_wdt"); + superio_func_add(chip, "gpio-f71889a"); + break; + case SIO_F71858_ID: + /* Confirmed (by datasheet) not to have a watchdog. */ + break; + case SIO_F81865_ID: + superio_func_add(chip, "f81865_wdt"); + break; + case SIO_F81866_ID: + superio_func_add(chip, "f81866_wdt"); + superio_func_add(chip, "gpio-f81866"); + break; + default: + pr_info("Unrecognized Fintek device: 0x%04x\n", chip->devid); + } + + superio_exit(sioaddr); +} + +static int fintek_superio_detect(void) +{ + fintek_superio_find(0x2e); + fintek_superio_find(0x4e); + + return 0; +} +coredevice_initcall(fintek_superio_detect); diff --git a/drivers/mfd/smsc-superio.c b/drivers/mfd/smsc-superio.c new file mode 100644 index 0000000..349c878 --- /dev/null +++ b/drivers/mfd/smsc-superio.c @@ -0,0 +1,115 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * Copyright (C) 2019 Ahmad Fatoum, Pengutronix + */ + +#define pr_fmt(fmt) "smsc-superio: " fmt + +#include +#include +#include +#include + +#define SIO_UNLOCK_KEY 0x55 /* Key to enable Super-I/O */ +#define SIO_LOCK_KEY 0xAA /* Key to disable Super-I/O */ + +#define SMSC_ID 0x10b8 /* Standard Microsystems Corp PCI ID */ + +static void superio_enter(u16 sioaddr) +{ + outb(SIO_UNLOCK_KEY, sioaddr); + mdelay(1); + outb(SIO_UNLOCK_KEY, sioaddr); +} + +static void superio_exit(u16 sioaddr) +{ + outb(SIO_LOCK_KEY, sioaddr); +} + +static void smsc_superio_find(u16 sioaddr, u16 id_reg) +{ + struct superio_chip *chip; + u16 devid; + + superio_enter(sioaddr); + + devid = superio_inw(sioaddr, id_reg); + switch(devid >> 8) { + case 0x02: + case 0x03: + case 0x07: + case 0x09: + case 0x0a: + case 0x0b: + case 0x0e: + case 0x14: + case 0x30: + case 0x40: + case 0x42: + case 0x43: + case 0x44: + case 0x46: + case 0x47: + case 0x4c: + case 0x4d: + case 0x51: + case 0x52: + case 0x54: + case 0x56: + case 0x57: + case 0x59: + case 0x5d: + case 0x5f: + case 0x60: + case 0x62: + case 0x67: + case 0x6b: + case 0x6e: + case 0x6f: + case 0x74: + case 0x76: + case 0x77: + case 0x78: + case 0x79: + case 0x7a: + case 0x7c: + case 0x7d: + case 0x7f: + case 0x81: + case 0x83: + case 0x85: + case 0x86: + case 0x89: + case 0x8c: + case 0x90: + break; + default: + pr_debug("Not a SMSC device (port=0x%02x, devid=0x%04x)\n", + sioaddr, devid); + return; + } + + chip = xzalloc(sizeof(*chip)); + + chip->devid = devid; + chip->vid = SMSC_ID; + chip->sioaddr = sioaddr; + chip->enter = superio_enter; + chip->exit = superio_exit; + + superio_chip_add(chip); + + superio_exit(sioaddr); +} + +static int smsc_superio_detect(void) +{ + u16 ports[] = { 0x2e, 0x4e, 0x162e, 0x164e, 0x3f0, 0x370 }; + + for (int i = 0; i < ARRAY_SIZE(ports); i++) + smsc_superio_find(ports[i], SIO_REG_DEVID); + + return 0; +} +coredevice_initcall(smsc_superio_detect); diff --git a/drivers/mfd/superio.c b/drivers/mfd/superio.c new file mode 100644 index 0000000..0f08d56 --- /dev/null +++ b/drivers/mfd/superio.c @@ -0,0 +1,98 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * Copyright (C) 2019 Ahmad Fatoum, Pengutronix + */ + +#define pr_fmt(fmt) "superio: " fmt + +#include +#include +#include + +struct device_d *superio_func_add(struct superio_chip *siochip, const char *name) +{ + struct device_d *dev; + int ret; + + dev = device_alloc(name, DEVICE_ID_DYNAMIC); + dev->parent = siochip->dev; + + + ret = platform_device_register(dev); + if (ret) + return NULL; + + return dev; +} +EXPORT_SYMBOL(superio_func_add) + +static int superio_reg_read(void *ctx, unsigned int reg, unsigned int *val) +{ + struct superio_chip *siochip = ctx; + + siochip->enter(siochip->sioaddr); + + *val = superio_inb(siochip->sioaddr, reg); + + siochip->exit(siochip->sioaddr); + + return 0; +} + +static int superio_reg_write(void *ctx, unsigned int reg, unsigned int val) +{ + struct superio_chip *siochip = ctx; + + siochip->enter(siochip->sioaddr); + + superio_outb(siochip->sioaddr, reg, val); + + siochip->exit(siochip->sioaddr); + + return 0; +} + +static struct regmap_bus superio_regmap_bus = { + .reg_write = superio_reg_write, + .reg_read = superio_reg_read, +}; + +static struct regmap_config superio_regmap_config = { + .reg_bits = 8, + .val_bits = 8, + .reg_stride = 1, + .max_register = 0xff, +}; + +void superio_chip_add(struct superio_chip *siochip) +{ + struct regmap *regmap; + char *chipname; + char str[5]; + int ret; + + chipname = xasprintf("superio-%04x:%04x@%02x", + siochip->vid, siochip->devid, siochip->sioaddr); + siochip->dev = add_generic_device(chipname, DEVICE_ID_SINGLE, NULL, + siochip->sioaddr, 2, IORESOURCE_IO, + NULL); + + siochip->dev->priv = siochip; + + sprintf(str, "%04x", siochip->vid); + dev_add_param_fixed(siochip->dev, "vendor", str); + sprintf(str, "%04x", siochip->devid); + dev_add_param_fixed(siochip->dev, "device", str); + + regmap = regmap_init(siochip->dev, &superio_regmap_bus, siochip, + &superio_regmap_config); + if (IS_ERR(regmap)) + pr_warn("creating %s regmap failed: %s\n", + chipname, strerror(-PTR_ERR(regmap))); + + ret = regmap_register_cdev(regmap, chipname); + if (ret) + pr_warn("registering %s regmap cdev failed: %s\n", + chipname, strerror(-ret)); +} +EXPORT_SYMBOL(superio_chip_add) diff --git a/drivers/mtd/ubi/Kconfig b/drivers/mtd/ubi/Kconfig index 9a34408..ed2f13d 100644 --- a/drivers/mtd/ubi/Kconfig +++ b/drivers/mtd/ubi/Kconfig @@ -10,23 +10,6 @@ if MTD_UBI -config MTD_UBI_WL_THRESHOLD - int "UBI wear-leveling threshold" - default 4096 - range 2 65536 - help - This parameter defines the maximum difference between the highest - erase counter value and the lowest erase counter value of eraseblocks - of UBI devices. When this threshold is exceeded, UBI starts performing - wear leveling by means of moving data from eraseblock with low erase - counter to eraseblocks with high erase counter. - - The default value should be OK for SLC NAND flashes, NOR flashes and - other flashes which have eraseblock life-cycle 100000 or more. - However, in case of MLC NAND flashes which typically have eraseblock - life-cycle less than 10000, the threshold should be lessened (e.g., - to 128 or 256, although it does not have to be power of 2). - config MTD_UBI_BEB_LIMIT int "Maximum expected bad eraseblock count per 1024 eraseblocks" default 20 diff --git a/drivers/mtd/ubi/build.c b/drivers/mtd/ubi/build.c index 493c778..604fe87 100644 --- a/drivers/mtd/ubi/build.c +++ b/drivers/mtd/ubi/build.c @@ -655,7 +655,7 @@ ubi->vol_count - UBI_INT_VOL_COUNT, UBI_INT_VOL_COUNT, ubi->vtbl_slots); ubi_msg(ubi, "max/mean erase counter: %d/%d, WL threshold: %d, image sequence number: %u", - ubi->max_ec, ubi->mean_ec, CONFIG_MTD_UBI_WL_THRESHOLD, + ubi->max_ec, ubi->mean_ec, UBI_WL_THRESHOLD, ubi->image_seq); ubi_msg(ubi, "available PEBs: %d, total reserved PEBs: %d, PEBs reserved for bad PEB handling: %d", ubi->avail_pebs, ubi->rsvd_pebs, ubi->beb_rsvd_pebs); diff --git a/drivers/mtd/ubi/ubi.h b/drivers/mtd/ubi/ubi.h index 922c1a3..7d07bbf 100644 --- a/drivers/mtd/ubi/ubi.h +++ b/drivers/mtd/ubi/ubi.h @@ -69,6 +69,17 @@ */ #define UBI_PROT_QUEUE_LEN 10 +/* + * Maximum difference between two erase counters. If this threshold is + * exceeded, the WL sub-system starts moving data from used physical + * eraseblocks with low erase counter to free physical eraseblocks with high + * erase counter. + * Extensive wear-leveling in the barebox can lead to stack overflows. Thus + * disable it by setting the threshold to the OS's max configurable value and + * leave wear-leveling to the OS. + */ +#define UBI_WL_THRESHOLD 65536 + /* The volume ID/LEB number/erase counter is unknown */ #define UBI_UNKNOWN -1 diff --git a/drivers/mtd/ubi/wl.c b/drivers/mtd/ubi/wl.c index cf90ecf..013ba3e 100644 --- a/drivers/mtd/ubi/wl.c +++ b/drivers/mtd/ubi/wl.c @@ -101,14 +101,6 @@ #define WL_RESERVED_PEBS 1 /* - * Maximum difference between two erase counters. If this threshold is - * exceeded, the WL sub-system starts moving data from used physical - * eraseblocks with low erase counter to free physical eraseblocks with high - * erase counter. - */ -#define UBI_WL_THRESHOLD CONFIG_MTD_UBI_WL_THRESHOLD - -/* * When a physical eraseblock is moved, the WL sub-system has to pick the target * physical eraseblock to move to. The simplest way would be just to pick the * one with the highest erase counter. But in certain workloads this could lead diff --git a/drivers/net/ag71xx.c b/drivers/net/ag71xx.c index 0565c90..70aaa60 100644 --- a/drivers/net/ag71xx.c +++ b/drivers/net/ag71xx.c @@ -667,7 +667,7 @@ } static __maybe_unused struct of_device_id ag71xx_dt_ids[] = { - { .compatible = "qca,ar9331-ge0", .data = &ag71xx_cfg_ar9331_ge0, }, + { .compatible = "qca,ar9330-eth", .data = &ag71xx_cfg_ar9331_ge0, }, { .compatible = "qca,ar9344-gmac0", .data = &ag71xx_cfg_ar9344_gmac0, }, { /* sentinel */ } }; diff --git a/drivers/net/phy/mv88e6xxx/Makefile b/drivers/net/phy/mv88e6xxx/Makefile index e09ea0a..e1d4b1b 100644 --- a/drivers/net/phy/mv88e6xxx/Makefile +++ b/drivers/net/phy/mv88e6xxx/Makefile @@ -1,5 +1,6 @@ obj-y += mv88e6xxx.o mv88e6xxx-objs := chip.o +mv88e6xxx-objs += global1.o mv88e6xxx-objs += global2.o mv88e6xxx-objs += port.o diff --git a/drivers/net/phy/mv88e6xxx/chip.c b/drivers/net/phy/mv88e6xxx/chip.c index 9688dbd..b1bffe5 100644 --- a/drivers/net/phy/mv88e6xxx/chip.c +++ b/drivers/net/phy/mv88e6xxx/chip.c @@ -11,6 +11,7 @@ #include #include "chip.h" +#include "global1.h" #include "global2.h" #include "port.h" @@ -342,6 +343,7 @@ .name = "Marvell 88E6085", .num_ports = 10, .port_base_addr = 0x10, + .global1_addr = 0x1b, .global2_addr = 0x1c, .ops = &mv88e6085_ops, }, @@ -352,6 +354,7 @@ .name = "Marvell 88E6095/88E6095F", .num_ports = 11, .port_base_addr = 0x10, + .global1_addr = 0x1b, .global2_addr = 0x1c, .ops = &mv88e6095_ops, }, @@ -362,6 +365,7 @@ .name = "Marvell 88E6097/88E6097F", .num_ports = 11, .port_base_addr = 0x10, + .global1_addr = 0x1b, .global2_addr = 0x1c, .ops = &mv88e6097_ops, }, @@ -372,6 +376,7 @@ .name = "Marvell 88E6123", .num_ports = 3, .port_base_addr = 0x10, + .global1_addr = 0x1b, .global2_addr = 0x1c, .ops = &mv88e6123_ops, }, @@ -382,6 +387,7 @@ .name = "Marvell 88E6131", .num_ports = 8, .port_base_addr = 0x10, + .global1_addr = 0x1b, .global2_addr = 0x1c, .ops = &mv88e6131_ops, }, @@ -392,6 +398,7 @@ .name = "Marvell 88E6341", .num_ports = 6, .port_base_addr = 0x10, + .global1_addr = 0x1b, .global2_addr = 0x1c, .ops = &mv88e6141_ops, }, @@ -402,6 +409,7 @@ .name = "Marvell 88E6161", .num_ports = 6, .port_base_addr = 0x10, + .global1_addr = 0x1b, .global2_addr = 0x1c, .ops = &mv88e6161_ops, }, @@ -412,6 +420,7 @@ .name = "Marvell 88E6165", .num_ports = 6, .port_base_addr = 0x10, + .global1_addr = 0x1b, .global2_addr = 0x1c, .ops = &mv88e6165_ops, }, @@ -422,6 +431,7 @@ .name = "Marvell 88E6171", .num_ports = 7, .port_base_addr = 0x10, + .global1_addr = 0x1b, .global2_addr = 0x1c, .ops = &mv88e6171_ops, }, @@ -432,6 +442,7 @@ .name = "Marvell 88E6172", .num_ports = 7, .port_base_addr = 0x10, + .global1_addr = 0x1b, .global2_addr = 0x1c, .ops = &mv88e6172_ops, }, @@ -442,6 +453,7 @@ .name = "Marvell 88E6175", .num_ports = 7, .port_base_addr = 0x10, + .global1_addr = 0x1b, .global2_addr = 0x1c, .ops = &mv88e6175_ops, }, @@ -452,6 +464,7 @@ .name = "Marvell 88E6176", .num_ports = 7, .port_base_addr = 0x10, + .global1_addr = 0x1b, .global2_addr = 0x1c, .ops = &mv88e6176_ops, }, @@ -462,6 +475,7 @@ .name = "Marvell 88E6185", .num_ports = 10, .port_base_addr = 0x10, + .global1_addr = 0x1b, .global2_addr = 0x1c, .ops = &mv88e6185_ops, }, @@ -472,6 +486,7 @@ .name = "Marvell 88E6190", .num_ports = 11, /* 10 + Z80 */ .port_base_addr = 0x0, + .global1_addr = 0x1b, .global2_addr = 0x1c, .ops = &mv88e6190_ops, }, @@ -482,6 +497,7 @@ .name = "Marvell 88E6190X", .num_ports = 11, /* 10 + Z80 */ .port_base_addr = 0x0, + .global1_addr = 0x1b, .global2_addr = 0x1c, .ops = &mv88e6190x_ops, }, @@ -492,6 +508,7 @@ .name = "Marvell 88E6191", .num_ports = 11, /* 10 + Z80 */ .port_base_addr = 0x0, + .global1_addr = 0x1b, .global2_addr = 0x1c, .ops = &mv88e6191_ops, }, @@ -502,6 +519,7 @@ .name = "Marvell 88E6240", .num_ports = 7, .port_base_addr = 0x10, + .global1_addr = 0x1b, .global2_addr = 0x1c, .ops = &mv88e6240_ops, }, @@ -512,6 +530,7 @@ .name = "Marvell 88E6290", .num_ports = 11, /* 10 + Z80 */ .port_base_addr = 0x0, + .global1_addr = 0x1b, .global2_addr = 0x1c, .ops = &mv88e6290_ops, }, @@ -522,6 +541,7 @@ .name = "Marvell 88E6320", .num_ports = 7, .port_base_addr = 0x10, + .global1_addr = 0x1b, .global2_addr = 0x1c, .ops = &mv88e6320_ops, }, @@ -532,6 +552,7 @@ .name = "Marvell 88E6321", .num_ports = 7, .port_base_addr = 0x10, + .global1_addr = 0x1b, .global2_addr = 0x1c, .ops = &mv88e6321_ops, }, @@ -542,6 +563,7 @@ .name = "Marvell 88E6341", .num_ports = 6, .port_base_addr = 0x10, + .global1_addr = 0x1b, .global2_addr = 0x1c, .ops = &mv88e6341_ops, }, @@ -552,6 +574,7 @@ .name = "Marvell 88E6350", .num_ports = 7, .port_base_addr = 0x10, + .global1_addr = 0x1b, .global2_addr = 0x1c, .ops = &mv88e6350_ops, }, @@ -562,6 +585,7 @@ .name = "Marvell 88E6351", .num_ports = 7, .port_base_addr = 0x10, + .global1_addr = 0x1b, .global2_addr = 0x1c, .ops = &mv88e6351_ops, }, @@ -572,6 +596,7 @@ .name = "Marvell 88E6352", .num_ports = 7, .port_base_addr = 0x10, + .global1_addr = 0x1b, .global2_addr = 0x1c, .ops = &mv88e6352_ops, }, @@ -582,6 +607,7 @@ .name = "Marvell 88E6390", .num_ports = 11, /* 10 + Z80 */ .port_base_addr = 0x0, + .global1_addr = 0x1b, .global2_addr = 0x1c, .ops = &mv88e6390_ops, }, @@ -592,6 +618,7 @@ .name = "Marvell 88E6390X", .num_ports = 11, /* 10 + Z80 */ .port_base_addr = 0x0, + .global1_addr = 0x1b, .global2_addr = 0x1c, .ops = &mv88e6390x_ops, }, @@ -741,6 +768,8 @@ mv88e6xxx_hardware_reset_delay(); gpio_set_active(chip->reset, 0); mv88e6xxx_hardware_reset_delay(); + + mv88e6xxx_g1_wait_eeprom_done(chip); } } @@ -797,7 +826,7 @@ err = of_property_read_u32(np, "reg", ®); if (err) { - dev_err(dev, "Couldn't determine switch MIDO address\n"); + dev_err(dev, "Couldn't determine switch MDIO address\n"); return err; } @@ -836,6 +865,11 @@ */ mv88e6xxx_hardware_reset_delay(); } + /* + * Switch will not return valid data over MDIO until EEPROM is + * loaded + */ + mv88e6xxx_g1_wait_eeprom_done(chip); err = mv88e6xxx_detect(chip); if (err) diff --git a/drivers/net/phy/mv88e6xxx/chip.h b/drivers/net/phy/mv88e6xxx/chip.h index 7548358..57f74a3 100644 --- a/drivers/net/phy/mv88e6xxx/chip.h +++ b/drivers/net/phy/mv88e6xxx/chip.h @@ -34,6 +34,7 @@ const char *name; unsigned int num_ports; unsigned int port_base_addr; + unsigned int global1_addr; unsigned int global2_addr; const struct mv88e6xxx_ops *ops; diff --git a/drivers/net/phy/mv88e6xxx/global1.c b/drivers/net/phy/mv88e6xxx/global1.c new file mode 100644 index 0000000..bace539 --- /dev/null +++ b/drivers/net/phy/mv88e6xxx/global1.c @@ -0,0 +1,51 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +/* + * Marvell 88E6xxx Switch Global (1) Registers support + * + * Copyright (c) 2008 Marvell Semiconductor + * + * Copyright (c) 2016-2017 Savoir-faire Linux Inc. + * Vivien Didelot + */ + +#include +#include + +#include "chip.h" +#include "global1.h" + +static int mv88e6xxx_g1_read(struct mv88e6xxx_chip *chip, int reg, u16 *val) +{ + int addr = chip->info->global1_addr; + + return mv88e6xxx_read(chip, addr, reg, val); +} + +void mv88e6xxx_g1_wait_eeprom_done(struct mv88e6xxx_chip *chip) +{ + const uint64_t start = get_time_ns(); + const uint64_t timeout = SECOND; + u16 val; + int err; + + /* Wait up to 1 second for the switch to finish reading the + * EEPROM. + */ + while (!is_timeout(start, timeout)) { + err = mv88e6xxx_g1_read(chip, MV88E6XXX_G1_STS, &val); + if (err) { + dev_err(chip->dev, "Error reading status\n"); + return; + } + + if (val != 0xFFFF && /* switch will return 0xffff until + * EEPROM is loaded + */ + val & BIT(MV88E6XXX_G1_STS_IRQ_EEPROM_DONE)) + return; + + mdelay(2); + } + + dev_err(chip->dev, "Timeout waiting for EEPROM done\n"); +} diff --git a/drivers/net/phy/mv88e6xxx/global1.h b/drivers/net/phy/mv88e6xxx/global1.h new file mode 100644 index 0000000..a505bae --- /dev/null +++ b/drivers/net/phy/mv88e6xxx/global1.h @@ -0,0 +1,37 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later */ +/* + * Marvell 88E6xxx Switch Global (1) Registers support + * + * Copyright (c) 2008 Marvell Semiconductor + * + * Copyright (c) 2016-2017 Savoir-faire Linux Inc. + * Vivien Didelot + */ + +#ifndef _MV88E6XXX_GLOBAL1_H +#define _MV88E6XXX_GLOBAL1_H + +#include "chip.h" + +/* Offset 0x00: Switch Global Status Register */ +#define MV88E6XXX_G1_STS 0x00 +#define MV88E6352_G1_STS_PPU_STATE 0x8000 +#define MV88E6185_G1_STS_PPU_STATE_MASK 0xc000 +#define MV88E6185_G1_STS_PPU_STATE_DISABLED_RST 0x0000 +#define MV88E6185_G1_STS_PPU_STATE_INITIALIZING 0x4000 +#define MV88E6185_G1_STS_PPU_STATE_DISABLED 0x8000 +#define MV88E6185_G1_STS_PPU_STATE_POLLING 0xc000 +#define MV88E6XXX_G1_STS_INIT_READY 0x0800 +#define MV88E6XXX_G1_STS_IRQ_AVB 8 +#define MV88E6XXX_G1_STS_IRQ_DEVICE 7 +#define MV88E6XXX_G1_STS_IRQ_STATS 6 +#define MV88E6XXX_G1_STS_IRQ_VTU_PROB 5 +#define MV88E6XXX_G1_STS_IRQ_VTU_DONE 4 +#define MV88E6XXX_G1_STS_IRQ_ATU_PROB 3 +#define MV88E6XXX_G1_STS_IRQ_ATU_DONE 2 +#define MV88E6XXX_G1_STS_IRQ_TCAM_DONE 1 +#define MV88E6XXX_G1_STS_IRQ_EEPROM_DONE 0 + +void mv88e6xxx_g1_wait_eeprom_done(struct mv88e6xxx_chip *chip); + +#endif /* _MV88E6XXX_GLOBAL1_H */ diff --git a/drivers/nvmem/core.c b/drivers/nvmem/core.c index 2592487..06e1414 100644 --- a/drivers/nvmem/core.c +++ b/drivers/nvmem/core.c @@ -57,9 +57,14 @@ static ssize_t nvmem_cdev_read(struct cdev *cdev, void *buf, size_t count, loff_t offset, unsigned long flags) { - struct nvmem_device *nvmem = container_of(cdev, struct nvmem_device, cdev); + struct nvmem_device *nvmem; ssize_t retlen; + if (cdev->master) + nvmem = container_of(cdev->master, struct nvmem_device, cdev); + else + nvmem = container_of(cdev, struct nvmem_device, cdev); + dev_dbg(cdev->dev, "read ofs: 0x%08llx count: 0x%08zx\n", offset, count); @@ -71,9 +76,14 @@ static ssize_t nvmem_cdev_write(struct cdev *cdev, const void *buf, size_t count, loff_t offset, unsigned long flags) { - struct nvmem_device *nvmem = container_of(cdev, struct nvmem_device, cdev); + struct nvmem_device *nvmem; ssize_t retlen; + if (cdev->master) + nvmem = container_of(cdev->master, struct nvmem_device, cdev); + else + nvmem = container_of(cdev, struct nvmem_device, cdev); + dev_dbg(cdev->dev, "write ofs: 0x%08llx count: 0x%08zx\n", offset, count); diff --git a/drivers/regulator/pfuze.c b/drivers/regulator/pfuze.c index dc41e8f..1950ffb 100644 --- a/drivers/regulator/pfuze.c +++ b/drivers/regulator/pfuze.c @@ -161,16 +161,11 @@ static int __init pfuze_probe(struct device_d *dev) { - struct pfuze_devtype *devtype; int ret; if (pfuze_dev) return -EBUSY; - ret = dev_get_drvdata(dev, (const void **)&devtype); - if (ret) - return ret; - pfuze_dev = xzalloc(sizeof(*pfuze_dev)); pfuze_dev->dev = dev; @@ -192,26 +187,19 @@ return 0; } -static struct pfuze_devtype pfuze100_devtype = { -}; - -static struct pfuze_devtype pfuze200_devtype = { -}; - -static struct pfuze_devtype pfuze3000_devtype = { -}; - static struct platform_device_id pfuze_ids[] = { - { .name = "pfuze100", .driver_data = (ulong)&pfuze100_devtype, }, - { .name = "pfuze200", .driver_data = (ulong)&pfuze200_devtype, }, - { .name = "pfuze3000", .driver_data = (ulong)&pfuze3000_devtype, }, + { .name = "pfuze100" }, + { .name = "pfuze200" }, + { .name = "pfuze3000" }, + { .name = "pfuze3001" }, { } }; static __maybe_unused struct of_device_id pfuze_dt_ids[] = { - { .compatible = "fsl,pfuze100", .data = &pfuze100_devtype, }, - { .compatible = "fsl,pfuze200", .data = &pfuze200_devtype, }, - { .compatible = "fsl,pfuze3000", .data = &pfuze3000_devtype, }, + { .compatible = "fsl,pfuze100" }, + { .compatible = "fsl,pfuze200" }, + { .compatible = "fsl,pfuze3000" }, + { .compatible = "fsl,pfuze3001" }, { } }; diff --git a/drivers/usb/gadget/f_acm.c b/drivers/usb/gadget/f_acm.c index cba59b1..42a2b03 100644 --- a/drivers/usb/gadget/f_acm.c +++ b/drivers/usb/gadget/f_acm.c @@ -104,7 +104,7 @@ .bInterfaceCount = 2, // control + data .bFunctionClass = USB_CLASS_COMM, .bFunctionSubClass = USB_CDC_SUBCLASS_ACM, - .bFunctionProtocol = USB_CDC_ACM_PROTO_AT_V25TER, + .bFunctionProtocol = USB_CDC_PROTO_NONE, /* .iFunction = DYNAMIC */ }; @@ -116,7 +116,7 @@ .bNumEndpoints = 1, .bInterfaceClass = USB_CLASS_COMM, .bInterfaceSubClass = USB_CDC_SUBCLASS_ACM, - .bInterfaceProtocol = USB_CDC_ACM_PROTO_AT_V25TER, + .bInterfaceProtocol = USB_CDC_PROTO_NONE, /* .iInterface = DYNAMIC */ }; diff --git a/drivers/watchdog/Kconfig b/drivers/watchdog/Kconfig index fbaab89..45dd41a 100644 --- a/drivers/watchdog/Kconfig +++ b/drivers/watchdog/Kconfig @@ -96,4 +96,13 @@ help Enable to support configuration of the stpmic1's built-in watchdog. +config F71808E_WDT + bool "Fintek F718xx, F818xx Super I/O Watchdog" + depends on X86 + depends on FINTEK_SUPERIO + help + This is the driver for the hardware watchdog on the Fintek F71808E, + F71862FG, F71868, F71869, F71882FG, F71889FG, F81865 and F81866 + Super I/O controllers. + endif diff --git a/drivers/watchdog/Makefile b/drivers/watchdog/Makefile index 1fbd780..63efc2a 100644 --- a/drivers/watchdog/Makefile +++ b/drivers/watchdog/Makefile @@ -13,3 +13,4 @@ obj-$(CONFIG_RAVE_SP_WATCHDOG) += rave-sp-wdt.o obj-$(CONFIG_STM32_IWDG_WATCHDOG) += stm32_iwdg.o obj-$(CONFIG_STPMIC1_WATCHDOG) += stpmic1_wdt.o +obj-$(CONFIG_F71808E_WDT) += f71808e_wdt.o diff --git a/drivers/watchdog/f71808e_wdt.c b/drivers/watchdog/f71808e_wdt.c new file mode 100644 index 0000000..4f881a1 --- /dev/null +++ b/drivers/watchdog/f71808e_wdt.c @@ -0,0 +1,379 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +/*************************************************************************** + * Copyright (C) 2006 by Hans Edgington * + * Copyright (C) 2007-2009 Hans de Goede * + * Copyright (C) 2010 Giel van Schijndel * + * Copyright (C) 2019 Ahmad Fatoum * + * * + ***************************************************************************/ + +#define pr_fmt(fmt) "f71808e_wdt: " fmt + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define SIO_F71808FG_LD_WDT 0x07 /* Watchdog timer logical device */ +#define SIO_UNLOCK_KEY 0x87 /* Key to enable Super-I/O */ +#define SIO_LOCK_KEY 0xAA /* Key to disable Super-I/O */ + +#define SIO_REG_LDSEL 0x07 /* Logical device select */ +#define SIO_REG_DEVREV 0x22 /* Device revision */ +#define SIO_REG_ROM_ADDR_SEL 0x27 /* ROM address select */ +#define SIO_F81866_REG_PORT_SEL 0x27 /* F81866 Multi-Function Register */ +#define SIO_REG_MFUNCT1 0x29 /* Multi function select 1 */ +#define SIO_REG_MFUNCT2 0x2a /* Multi function select 2 */ +#define SIO_REG_MFUNCT3 0x2b /* Multi function select 3 */ +#define SIO_F81866_REG_GPIO1 0x2c /* F81866 GPIO1 Enable Register */ +#define SIO_REG_ENABLE 0x30 /* Logical device enable */ +#define SIO_REG_ADDR 0x60 /* Logical device address (2 bytes) */ + +#define F71808FG_REG_WDO_CONF 0xf0 +#define F71808FG_REG_WDT_CONF 0xf5 +#define F71808FG_REG_WD_TIME 0xf6 + +#define F71808FG_FLAG_WDOUT_EN 7 + +#define F71808FG_FLAG_WDTMOUT_STS 6 +#define F71808FG_FLAG_WD_EN 5 +#define F71808FG_FLAG_WD_PULSE 4 +#define F71808FG_FLAG_WD_UNIT 3 + +#define F81865_REG_WDO_CONF 0xfa +#define F81865_FLAG_WDOUT_EN 0 + +/* Default values */ +#define WATCHDOG_MAX_TIMEOUT (60 * 255) + +enum pulse_width { + PULSE_WIDTH_LEVEL, PULSE_WIDTH_1MS, + PULSE_WIDTH_LOW, PULSE_WIDTH_MID, PULSE_WIDTH_HIGH +}; + +const char *pulse_width_names[] = { "level", "1", "25", "125", "5000" }; +const char *pulse_width_names_f71868[] = { "level", "1", "30", "150", "6000" }; + +enum wdtrst_pin { + WDTRST_PIN_56, WDTRST_PIN_63, +}; + +const char *f71862fg_pin_names[] = { "56", "63" }; + +enum chips { f71808fg, f71858fg, f71862fg, f71868, f71869, f71882fg, f71889fg, + f81865, f81866}; + +struct f71808e_wdt; + +struct f71808e_variant_data { + enum chips type; + void (*pinconf)(struct f71808e_wdt *wd); +}; + +struct f71808e_wdt { + struct watchdog wdd; + u16 sioaddr; + const struct f71808e_variant_data *variant; + unsigned int timeout; + u8 timer_val; /* content for the wd_time register */ + char minutes_mode; + int pulse_width; + int f71862fg_pin; +}; + +static inline struct f71808e_wdt *to_f71808e_wdt(struct watchdog *wdd) +{ + return container_of(wdd, struct f71808e_wdt, wdd); +} + +static inline bool has_f81865_wdo_conf(struct f71808e_wdt *wd) +{ + return wd->variant->type == f81865 || wd->variant->type == f81866; +} + +static inline void superio_enter(u16 base) +{ + /* according to the datasheet the key must be sent twice! */ + outb(SIO_UNLOCK_KEY, base); + outb(SIO_UNLOCK_KEY, base); +} + +static inline void superio_select(u16 base, int ld) +{ + outb(SIO_REG_LDSEL, base); + outb(ld, base + 1); +} + +static inline void superio_exit(u16 base) +{ + outb(SIO_LOCK_KEY, base); +} + +static void f71808e_wdt_keepalive(struct f71808e_wdt *wd) +{ + superio_enter(wd->sioaddr); + + superio_select(wd->sioaddr, SIO_F71808FG_LD_WDT); + + if (wd->minutes_mode) + /* select minutes for timer units */ + superio_set_bit(wd->sioaddr, F71808FG_REG_WDT_CONF, + F71808FG_FLAG_WD_UNIT); + else + /* select seconds for timer units */ + superio_clear_bit(wd->sioaddr, F71808FG_REG_WDT_CONF, + F71808FG_FLAG_WD_UNIT); + + /* Set timer value */ + superio_outb(wd->sioaddr, F71808FG_REG_WD_TIME, + wd->timer_val); + + superio_exit(wd->sioaddr); +} + +static void f71808e_wdt_start(struct f71808e_wdt *wd) +{ + /* Make sure we don't die as soon as the watchdog is enabled below */ + f71808e_wdt_keepalive(wd); + + superio_enter(wd->sioaddr); + + superio_select(wd->sioaddr, SIO_F71808FG_LD_WDT); + + /* Watchdog pin configuration */ + wd->variant->pinconf(wd); + + superio_select(wd->sioaddr, SIO_F71808FG_LD_WDT); + superio_set_bit(wd->sioaddr, SIO_REG_ENABLE, 0); + + if (has_f81865_wdo_conf(wd)) + superio_set_bit(wd->sioaddr, F81865_REG_WDO_CONF, + F81865_FLAG_WDOUT_EN); + else + superio_set_bit(wd->sioaddr, F71808FG_REG_WDO_CONF, + F71808FG_FLAG_WDOUT_EN); + + superio_set_bit(wd->sioaddr, F71808FG_REG_WDT_CONF, + F71808FG_FLAG_WD_EN); + + if (wd->pulse_width > 0) { + /* Select "pulse" output mode with given duration */ + u8 wdt_conf = superio_inb(wd->sioaddr, F71808FG_REG_WDT_CONF); + + /* Set WD_PSWIDTH bits (1:0) */ + wdt_conf = (wdt_conf & 0xfc) | (wd->pulse_width & 0x03); + /* Set WD_PULSE to "pulse" mode */ + wdt_conf |= BIT(F71808FG_FLAG_WD_PULSE); + + superio_outb(wd->sioaddr, F71808FG_REG_WDT_CONF, wdt_conf); + } else { + /* Select "level" output mode */ + superio_clear_bit(wd->sioaddr, F71808FG_REG_WDT_CONF, + F71808FG_FLAG_WD_PULSE); + } + + superio_exit(wd->sioaddr); +} + +static void f71808e_wdt_stop(struct f71808e_wdt *wd) +{ + superio_enter(wd->sioaddr); + + superio_select(wd->sioaddr, SIO_F71808FG_LD_WDT); + + superio_clear_bit(wd->sioaddr, F71808FG_REG_WDT_CONF, + F71808FG_FLAG_WD_EN); + + superio_exit(wd->sioaddr); +} + +static int f71808e_wdt_set_timeout(struct watchdog *wdd, unsigned int new_timeout) +{ + struct f71808e_wdt *wd = to_f71808e_wdt(wdd); + + if (!new_timeout) { + f71808e_wdt_stop(wd); + return 0; + } + + if (wd->timeout != new_timeout) { + if (new_timeout > 0xff) { + wd->timer_val = DIV_ROUND_UP(new_timeout, 60); + wd->minutes_mode = true; + } else { + wd->timer_val = new_timeout; + wd->minutes_mode = false; + } + + f71808e_wdt_start(wd); + wd->timeout = new_timeout; + } + + f71808e_wdt_keepalive(wd); + return 0; +} + +static int f71808e_wdt_init(struct f71808e_wdt *wd, struct device_d *dev) +{ + struct watchdog *wdd = &wd->wdd; + const char * const *names = pulse_width_names; + int wdt_conf; + int ret; + + superio_enter(wd->sioaddr); + + superio_select(wd->sioaddr, SIO_F71808FG_LD_WDT); + + wdt_conf = superio_inb(wd->sioaddr, F71808FG_REG_WDT_CONF); + + superio_exit(wd->sioaddr); + + if (wd->variant->type == f71868) + names = pulse_width_names_f71868; + + wd->pulse_width = PULSE_WIDTH_MID; /* either 125ms or 150ms */ + + dev_add_param_enum(dev, "pulse_width_ms", NULL, NULL, + &wd->pulse_width, names, + ARRAY_SIZE(pulse_width_names), + wd); + + if (wd->variant->type == f71862fg) { + wd->f71862fg_pin = WDTRST_PIN_63; + + dev_add_param_enum(dev, "wdtrst_pin", NULL, NULL, + &wd->f71862fg_pin, f71862fg_pin_names, + ARRAY_SIZE(f71862fg_pin_names), + wd); + } + + wdd->hwdev = dev; + wdd->set_timeout = &f71808e_wdt_set_timeout; + wdd->timeout_max = WATCHDOG_MAX_TIMEOUT; + + if (wdt_conf & BIT(F71808FG_FLAG_WDTMOUT_STS)) + reset_source_set_priority(RESET_WDG, + RESET_SOURCE_DEFAULT_PRIORITY); + + dev_info(dev, "reset reason: %s\n", reset_source_name()); + + ret = watchdog_register(wdd); + if (ret) + return ret; + + superio_enter(wd->sioaddr); + dev_info(dev, "revision %d probed.\n", + superio_inb(wd->sioaddr, SIO_REG_DEVREV)); + superio_exit(wd->sioaddr); + + return 0; +} + +static void f71808fg_pinconf(struct f71808e_wdt *wd) +{ + /* Set pin 21 to GPIO23/WDTRST#, then to WDTRST# */ + superio_clear_bit(wd->sioaddr, SIO_REG_MFUNCT2, 3); + superio_clear_bit(wd->sioaddr, SIO_REG_MFUNCT3, 3); +} +static void f71862fg_pinconf(struct f71808e_wdt *wd) +{ + u16 ioaddr = wd->sioaddr; + + if (wd->f71862fg_pin == WDTRST_PIN_63) { + /* SPI must be disabled first to use this pin! */ + superio_clear_bit(ioaddr, SIO_REG_ROM_ADDR_SEL, 6); + superio_set_bit(ioaddr, SIO_REG_MFUNCT3, 4); + } else if (wd->f71862fg_pin == WDTRST_PIN_56) { + superio_set_bit(ioaddr, SIO_REG_MFUNCT1, 1); + } +} +static void f71868_pinconf(struct f71808e_wdt *wd) +{ + /* GPIO14 --> WDTRST# */ + superio_clear_bit(wd->sioaddr, SIO_REG_MFUNCT1, 4); +} +static void f71882fg_pinconf(struct f71808e_wdt *wd) +{ + /* Set pin 56 to WDTRST# */ + superio_set_bit(wd->sioaddr, SIO_REG_MFUNCT1, 1); +} +static void f71889fg_pinconf(struct f71808e_wdt *wd) +{ + /* set pin 40 to WDTRST# */ + superio_outb(wd->sioaddr, SIO_REG_MFUNCT3, + superio_inb(wd->sioaddr, SIO_REG_MFUNCT3) & 0xcf); +} +static void f81865_pinconf(struct f71808e_wdt *wd) +{ + /* Set pin 70 to WDTRST# */ + superio_clear_bit(wd->sioaddr, SIO_REG_MFUNCT3, 5); +} +static void f81866_pinconf(struct f71808e_wdt *wd) +{ + /* + * GPIO1 Control Register when 27h BIT3:2 = 01 & BIT0 = 0. + * The PIN 70(GPIO15/WDTRST) is controlled by 2Ch: + * BIT5: 0 -> WDTRST# + * 1 -> GPIO15 + */ + u8 tmp = superio_inb(wd->sioaddr, SIO_F81866_REG_PORT_SEL); + tmp &= ~(BIT(3) | BIT(0)); + tmp |= BIT(2); + superio_outb(wd->sioaddr, SIO_F81866_REG_PORT_SEL, tmp); + + superio_clear_bit(wd->sioaddr, SIO_F81866_REG_GPIO1, 5); +} + +static struct f71808e_variant_data f71808fg_data = { .type = f71808fg, .pinconf = f71808fg_pinconf }; +static struct f71808e_variant_data f71862fg_data = { .type = f71862fg, .pinconf = f71862fg_pinconf }; +static struct f71808e_variant_data f71868_data = { .type = f71868, .pinconf = f71868_pinconf }; +static struct f71808e_variant_data f71869_data = { .type = f71869, .pinconf = f71868_pinconf }; +static struct f71808e_variant_data f71882fg_data = { .type = f71882fg, .pinconf = f71882fg_pinconf }; +static struct f71808e_variant_data f71889fg_data = { .type = f71889fg, .pinconf = f71889fg_pinconf }; +static struct f71808e_variant_data f81865_data = { .type = f81865, .pinconf = f81865_pinconf }; +static struct f71808e_variant_data f81866_data = { .type = f81866, .pinconf = f81866_pinconf }; + +static struct platform_device_id f71808e_wdt_ids[] = { + { .name = "f71808fg_wdt", .driver_data = (unsigned long)&f71808fg_data }, + { .name = "f71862fg_wdt", .driver_data = (unsigned long)&f71862fg_data }, + { .name = "f71868_wdt", .driver_data = (unsigned long)&f71868_data }, + { .name = "f71869_wdt", .driver_data = (unsigned long)&f71869_data }, + { .name = "f71882fg_wdt", .driver_data = (unsigned long)&f71882fg_data }, + { .name = "f71889fg_wdt", .driver_data = (unsigned long)&f71889fg_data }, + { .name = "f81865_wdt", .driver_data = (unsigned long)&f81865_data }, + { .name = "f81866_wdt", .driver_data = (unsigned long)&f81866_data }, + { /* sentinel */ }, +}; + +static int f71808e_probe(struct device_d *dev) +{ + struct f71808e_wdt *wd; + struct resource *res; + int ret; + + wd = xzalloc(sizeof(*wd)); + + ret = dev_get_drvdata(dev, (const void **)&wd->variant); + if (ret) + return ret; + + res = dev_get_resource(dev->parent, IORESOURCE_IO, 0); + if (IS_ERR(res)) + return PTR_ERR(res); + wd->sioaddr = res->start; + + return f71808e_wdt_init(wd, dev); +} + +static struct driver_d f71808e_wdt_driver = { + .probe = f71808e_probe, + .name = "f71808e_wdt", + .id_table = f71808e_wdt_ids, +}; + +device_platform_driver(f71808e_wdt_driver); diff --git a/fs/devfs-core.c b/fs/devfs-core.c index 2b93a95..258bb2d 100644 --- a/fs/devfs-core.c +++ b/fs/devfs-core.c @@ -122,10 +122,17 @@ struct device_d *child; list_for_each_entry(cdev, &dev->cdevs, devices_list) { + struct cdev *cdevl; + if (!cdev->partname) continue; if (!strcmp(cdev->partname, name)) return cdev; + + list_for_each_entry(cdevl, &cdev->links, link_entry) { + if (!strcmp(cdevl->partname, name)) + return cdev_readlink(cdevl); + } } device_for_each_child(dev, child) { @@ -252,6 +259,20 @@ new = xzalloc(sizeof(*new)); new->name = xstrdup(name); new->link = cdev; + + if (cdev->partname) { + size_t partnameoff = 0; + + if (cdev->master) { + size_t masterlen = strlen(cdev->master->name); + + if (!strncmp(name, cdev->master->name, masterlen)) + partnameoff += masterlen + 1; + } + + new->partname = xstrdup(name + partnameoff); + } + INIT_LIST_HEAD(&new->links); list_add_tail(&new->list, &cdev_list); list_add_tail(&new->link_entry, &cdev->links); diff --git a/fs/ext4/ext_common.h b/fs/ext4/ext_common.h index c084cf9..a28f591 100644 --- a/fs/ext4/ext_common.h +++ b/fs/ext4/ext_common.h @@ -37,7 +37,7 @@ /* Amount of indirect blocks in an inode. */ #define INDIRECT_BLOCKS 12 -/* Maximum lenght of a pathname. */ +/* Maximum length of a pathname. */ #define EXT2_PATH_MAX 4096 /* Maximum nesting of symlinks, used to prevent a loop. */ #define EXT2_MAX_SYMLINKCNT 8 diff --git a/fs/fs.c b/fs/fs.c index dda19db..12faaeb 100644 --- a/fs/fs.c +++ b/fs/fs.c @@ -2699,7 +2699,7 @@ struct path path; int ret; - ret = filename_lookup(AT_FDCWD, getname(pathname), LOOKUP_FOLLOW, &path); + ret = filename_lookup(AT_FDCWD, getname(pathname), LOOKUP_FOLLOW | LOOKUP_DIRECTORY, &path); if (ret) goto out; diff --git a/include/jtag.h b/include/jtag.h index 26c95fb..4cc4eac 100644 --- a/include/jtag.h +++ b/include/jtag.h @@ -28,7 +28,7 @@ * (repeat for each chip in the chain) * - ioctl JTAG_GET_ID identifies the chip * - ioctl JTAG_SET_IR_LENGTH sets the instruction register length - * Before accessing the data registers, instruction registers' lenghtes + * Before accessing the data registers, instruction registers' lengths * MUST be programmed for all chips. * After this initialization, you can execute JTAG_IR_WR, JTAG_DR_RD, JTAG_DR_WR * commands in any sequence. diff --git a/include/state.h b/include/state.h index 4e995a1..d98b781 100644 --- a/include/state.h +++ b/include/state.h @@ -5,17 +5,13 @@ struct state; -int state_backend_dtb_file(struct state *state, const char *of_path, - const char *path); -int state_backend_raw_file(struct state *state, const char *of_path, - const char *path, off_t offset, size_t size); +#if IS_ENABLED(CONFIG_STATE) struct state *state_new_from_node(struct device_node *node, bool readonly); void state_release(struct state *state); struct state *state_by_name(const char *name); struct state *state_by_node(const struct device_node *node); -int state_get_name(const struct state *state, char const **name); int state_load_no_auth(struct state *state); int state_load(struct state *state); @@ -24,4 +20,39 @@ int state_read_mac(struct state *state, const char *name, u8 *buf); +#else /* #if IS_ENABLED(CONFIG_STATE) */ + +static inline struct state *state_new_from_node(struct device_node *node, + bool readonly) +{ + return ERR_PTR(-ENOSYS); +} + +static inline struct state *state_by_name(const char *name) +{ + return NULL; +} + +static inline struct state *state_by_node(const struct device_node *node) +{ + return NULL; +}; + +static inline int state_load(struct state *state) +{ + return -ENOSYS; +} + +static inline int state_save(struct state *state) +{ + return -ENOSYS; +} + +static inline int state_read_mac(struct state *state, const char *name, u8 *buf) +{ + return -ENOSYS; +} + +#endif /* #if IS_ENABLED(CONFIG_STATE) / #else */ + #endif /* __STATE_H */ diff --git a/include/superio.h b/include/superio.h new file mode 100644 index 0000000..12bff58 --- /dev/null +++ b/include/superio.h @@ -0,0 +1,64 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * Copyright (C) 2019 Ahmad Fatoum, Pengutronix + */ + +#ifndef _SUPERIO_H_ +#define _SUPERIO_H_ + +#include +#include +#include +#include + +#define SIO_REG_DEVID 0x20 /* Device ID (2 bytes) */ +#define SIO_REG_DEVREV 0x22 /* Device revision */ +#define SIO_REG_MANID 0x23 /* Vendor ID (2 bytes) */ + +static inline u8 superio_inb(u16 base, u8 reg) +{ + outb(reg, base); + return inb(base + 1); +} + +static inline u16 superio_inw(u16 base, u8 reg) +{ + u16 val; + val = superio_inb(base, reg) << 8; + val |= superio_inb(base, reg + 1); + return val; +} + +static inline void superio_outb(u16 base, u8 reg, u8 val) +{ + outb(reg, base); + outb(val, base + 1); +} + +static inline void superio_set_bit(u16 base, u8 reg, unsigned bit) +{ + unsigned long val = superio_inb(base, reg); + __set_bit(bit, &val); + superio_outb(base, reg, val); +} + +static inline void superio_clear_bit(u16 base, u8 reg, unsigned bit) +{ + unsigned long val = superio_inb(base, reg); + __clear_bit(bit, &val); + superio_outb(base, reg, val); +} + +struct superio_chip { + struct device_d *dev; + u16 vid; + u16 devid; + u16 sioaddr; + void (*enter)(u16 sioaddr); + void (*exit)(u16 sioaddr); +}; + +void superio_chip_add(struct superio_chip *chip); +struct device_d *superio_func_add(struct superio_chip *chip, const char *name); + +#endif diff --git a/lib/fonts/font_7x14.c b/lib/fonts/font_7x14.c index 384ba39..e5ef832 100644 --- a/lib/fonts/font_7x14.c +++ b/lib/fonts/font_7x14.c @@ -2058,7 +2058,7 @@ 0x00, /* 0000000 */ 0x00, /* 0000000 */ - /* 128 0x80 '�' */ + /* 128 0x80 '€' */ 0x00, /* 0000000 */ 0x38, /* 0011100 */ 0x6c, /* 0110110 */ @@ -2074,7 +2074,7 @@ 0x70, /* 0111000 */ 0x00, /* 0000000 */ - /* 129 0x81 '�' */ + /* 129 0x81 '' */ 0x00, /* 0000000 */ 0xcc, /* 1100110 */ 0x00, /* 0000000 */ @@ -2090,7 +2090,7 @@ 0x00, /* 0000000 */ 0x00, /* 0000000 */ - /* 130 0x82 '�' */ + /* 130 0x82 '‚' */ 0x0c, /* 0000110 */ 0x18, /* 0001100 */ 0x30, /* 0011000 */ @@ -2106,7 +2106,7 @@ 0x00, /* 0000000 */ 0x00, /* 0000000 */ - /* 131 0x83 '�' */ + /* 131 0x83 'ƒ' */ 0x10, /* 0001000 */ 0x38, /* 0011100 */ 0x6c, /* 0110110 */ @@ -2122,7 +2122,7 @@ 0x00, /* 0000000 */ 0x00, /* 0000000 */ - /* 132 0x84 '�' */ + /* 132 0x84 '„' */ 0x00, /* 0000000 */ 0xcc, /* 1100110 */ 0x00, /* 0000000 */ @@ -2138,7 +2138,7 @@ 0x00, /* 0000000 */ 0x00, /* 0000000 */ - /* 133 0x85 '�' */ + /* 133 0x85 '…' */ 0x60, /* 0110000 */ 0x30, /* 0011000 */ 0x18, /* 0001100 */ @@ -2154,7 +2154,7 @@ 0x00, /* 0000000 */ 0x00, /* 0000000 */ - /* 134 0x86 '�' */ + /* 134 0x86 '†' */ 0x38, /* 0011100 */ 0x6c, /* 0110110 */ 0x38, /* 0011100 */ @@ -2170,7 +2170,7 @@ 0x00, /* 0000000 */ 0x00, /* 0000000 */ - /* 135 0x87 '�' */ + /* 135 0x87 '‡' */ 0x00, /* 0000000 */ 0x00, /* 0000000 */ 0x00, /* 0000000 */ @@ -2186,7 +2186,7 @@ 0x30, /* 0011000 */ 0xe0, /* 1110000 */ - /* 136 0x88 '�' */ + /* 136 0x88 'ˆ' */ 0x10, /* 0001000 */ 0x38, /* 0011100 */ 0x6c, /* 0110110 */ @@ -2202,7 +2202,7 @@ 0x00, /* 0000000 */ 0x00, /* 0000000 */ - /* 137 0x89 '�' */ + /* 137 0x89 '‰' */ 0x00, /* 0000000 */ 0xcc, /* 1100110 */ 0x00, /* 0000000 */ @@ -2218,7 +2218,7 @@ 0x00, /* 0000000 */ 0x00, /* 0000000 */ - /* 138 0x8a '�' */ + /* 138 0x8a 'Š' */ 0xc0, /* 1100000 */ 0x60, /* 0110000 */ 0x30, /* 0011000 */ @@ -2234,7 +2234,7 @@ 0x00, /* 0000000 */ 0x00, /* 0000000 */ - /* 139 0x8b '�' */ + /* 139 0x8b '‹' */ 0x00, /* 0000000 */ 0x6c, /* 0110110 */ 0x00, /* 0000000 */ @@ -2250,7 +2250,7 @@ 0x00, /* 0000000 */ 0x00, /* 0000000 */ - /* 140 0x8c '�' */ + /* 140 0x8c 'Œ' */ 0x30, /* 0011000 */ 0x78, /* 0111100 */ 0xcc, /* 1100110 */ @@ -2266,7 +2266,7 @@ 0x00, /* 0000000 */ 0x00, /* 0000000 */ - /* 141 0x8d '�' */ + /* 141 0x8d '' */ 0xc0, /* 1100000 */ 0x60, /* 0110000 */ 0x30, /* 0011000 */ @@ -2282,7 +2282,7 @@ 0x00, /* 0000000 */ 0x00, /* 0000000 */ - /* 142 0x8e '�' */ + /* 142 0x8e 'Ž' */ 0x00, /* 0000000 */ 0xcc, /* 1100110 */ 0x00, /* 0000000 */ @@ -2298,7 +2298,7 @@ 0x00, /* 0000000 */ 0x00, /* 0000000 */ - /* 143 0x8f '�' */ + /* 143 0x8f '' */ 0x30, /* 0011000 */ 0x48, /* 0100100 */ 0x48, /* 0100100 */ @@ -2314,7 +2314,7 @@ 0x00, /* 0000000 */ 0x00, /* 0000000 */ - /* 144 0x90 '�' */ + /* 144 0x90 '' */ 0x18, /* 0001100 */ 0x30, /* 0011000 */ 0xfc, /* 1111110 */ @@ -2330,7 +2330,7 @@ 0x00, /* 0000000 */ 0x00, /* 0000000 */ - /* 145 0x91 '�' */ + /* 145 0x91 '‘' */ 0x00, /* 0000000 */ 0x00, /* 0000000 */ 0x00, /* 0000000 */ @@ -2346,7 +2346,7 @@ 0x00, /* 0000000 */ 0x00, /* 0000000 */ - /* 146 0x92 '�' */ + /* 146 0x92 '’' */ 0x00, /* 0000000 */ 0x3e, /* 0011111 */ 0x6c, /* 0110110 */ @@ -2362,7 +2362,7 @@ 0x00, /* 0000000 */ 0x00, /* 0000000 */ - /* 147 0x93 '�' */ + /* 147 0x93 '“' */ 0x10, /* 0001000 */ 0x38, /* 0011100 */ 0x6c, /* 0110110 */ @@ -2378,7 +2378,7 @@ 0x00, /* 0000000 */ 0x00, /* 0000000 */ - /* 148 0x94 '�' */ + /* 148 0x94 '”' */ 0x00, /* 0000000 */ 0xcc, /* 1100110 */ 0x00, /* 0000000 */ @@ -2394,7 +2394,7 @@ 0x00, /* 0000000 */ 0x00, /* 0000000 */ - /* 149 0x95 '�' */ + /* 149 0x95 '•' */ 0xc0, /* 1100000 */ 0x60, /* 0110000 */ 0x30, /* 0011000 */ @@ -2410,7 +2410,7 @@ 0x00, /* 0000000 */ 0x00, /* 0000000 */ - /* 150 0x96 '�' */ + /* 150 0x96 '–' */ 0x30, /* 0011000 */ 0x78, /* 0111100 */ 0xcc, /* 1100110 */ @@ -2426,7 +2426,7 @@ 0x00, /* 0000000 */ 0x00, /* 0000000 */ - /* 151 0x97 '�' */ + /* 151 0x97 '—' */ 0x60, /* 0110000 */ 0x30, /* 0011000 */ 0x18, /* 0001100 */ @@ -2442,7 +2442,7 @@ 0x00, /* 0000000 */ 0x00, /* 0000000 */ - /* 152 0x98 '�' */ + /* 152 0x98 '˜' */ 0x00, /* 0000000 */ 0xcc, /* 1100110 */ 0x00, /* 0000000 */ @@ -2458,7 +2458,7 @@ 0x18, /* 0001100 */ 0x70, /* 0111000 */ - /* 153 0x99 '�' */ + /* 153 0x99 '™' */ 0xcc, /* 1100110 */ 0x00, /* 0000000 */ 0x78, /* 0111100 */ @@ -2474,7 +2474,7 @@ 0x00, /* 0000000 */ 0x00, /* 0000000 */ - /* 154 0x9a '�' */ + /* 154 0x9a 'š' */ 0xcc, /* 1100110 */ 0x00, /* 0000000 */ 0xcc, /* 1100110 */ @@ -2490,7 +2490,7 @@ 0x00, /* 0000000 */ 0x00, /* 0000000 */ - /* 155 0x9b '�' */ + /* 155 0x9b '›' */ 0x30, /* 0011000 */ 0x30, /* 0011000 */ 0x7c, /* 0111110 */ @@ -2506,7 +2506,7 @@ 0x00, /* 0000000 */ 0x00, /* 0000000 */ - /* 156 0x9c '�' */ + /* 156 0x9c 'œ' */ 0x38, /* 0011100 */ 0x6c, /* 0110110 */ 0x64, /* 0110010 */ @@ -2522,7 +2522,7 @@ 0x00, /* 0000000 */ 0x00, /* 0000000 */ - /* 157 0x9d '�' */ + /* 157 0x9d '' */ 0x00, /* 0000000 */ 0xcc, /* 1100110 */ 0xcc, /* 1100110 */ @@ -2538,7 +2538,7 @@ 0x00, /* 0000000 */ 0x00, /* 0000000 */ - /* 158 0x9e '�' */ + /* 158 0x9e 'ž' */ 0xf8, /* 1111100 */ 0xcc, /* 1100110 */ 0xcc, /* 1100110 */ @@ -2554,7 +2554,7 @@ 0x00, /* 0000000 */ 0x00, /* 0000000 */ - /* 159 0x9f '�' */ + /* 159 0x9f 'Ÿ' */ 0x1c, /* 0001110 */ 0x36, /* 0011011 */ 0x30, /* 0011000 */ @@ -2570,7 +2570,7 @@ 0x00, /* 0000000 */ 0x00, /* 0000000 */ - /* 160 0xa0 '�' */ + /* 160 0xa0 ' ' */ 0x18, /* 0001100 */ 0x30, /* 0011000 */ 0x60, /* 0110000 */ @@ -2586,7 +2586,7 @@ 0x00, /* 0000000 */ 0x00, /* 0000000 */ - /* 161 0xa1 '�' */ + /* 161 0xa1 '¡' */ 0x18, /* 0001100 */ 0x30, /* 0011000 */ 0x60, /* 0110000 */ @@ -2602,7 +2602,7 @@ 0x00, /* 0000000 */ 0x00, /* 0000000 */ - /* 162 0xa2 '�' */ + /* 162 0xa2 '¢' */ 0x18, /* 0001100 */ 0x30, /* 0011000 */ 0x60, /* 0110000 */ @@ -2618,7 +2618,7 @@ 0x00, /* 0000000 */ 0x00, /* 0000000 */ - /* 163 0xa3 '�' */ + /* 163 0xa3 '£' */ 0x18, /* 0001100 */ 0x30, /* 0011000 */ 0x60, /* 0110000 */ @@ -2634,7 +2634,7 @@ 0x00, /* 0000000 */ 0x00, /* 0000000 */ - /* 164 0xa4 '�' */ + /* 164 0xa4 '¤' */ 0x00, /* 0000000 */ 0x76, /* 0111011 */ 0xdc, /* 1101110 */ @@ -2650,7 +2650,7 @@ 0x00, /* 0000000 */ 0x00, /* 0000000 */ - /* 165 0xa5 '�' */ + /* 165 0xa5 '¥' */ 0x76, /* 0111011 */ 0xdc, /* 1101110 */ 0x00, /* 0000000 */ @@ -2666,7 +2666,7 @@ 0x00, /* 0000000 */ 0x00, /* 0000000 */ - /* 166 0xa6 '�' */ + /* 166 0xa6 '¦' */ 0x00, /* 0000000 */ 0x78, /* 0111100 */ 0xd8, /* 1101100 */ @@ -2682,7 +2682,7 @@ 0x00, /* 0000000 */ 0x00, /* 0000000 */ - /* 167 0xa7 '�' */ + /* 167 0xa7 '§' */ 0x00, /* 0000000 */ 0x70, /* 0111000 */ 0xd8, /* 1101100 */ @@ -2698,7 +2698,7 @@ 0x00, /* 0000000 */ 0x00, /* 0000000 */ - /* 168 0xa8 '�' */ + /* 168 0xa8 '¨' */ 0x00, /* 0000000 */ 0x30, /* 0011000 */ 0x30, /* 0011000 */ @@ -2714,7 +2714,7 @@ 0x00, /* 0000000 */ 0x00, /* 0000000 */ - /* 169 0xa9 '�' */ + /* 169 0xa9 '©' */ 0x00, /* 0000000 */ 0x00, /* 0000000 */ 0x00, /* 0000000 */ @@ -2730,7 +2730,7 @@ 0x00, /* 0000000 */ 0x00, /* 0000000 */ - /* 170 0xaa '�' */ + /* 170 0xaa 'ª' */ 0x00, /* 0000000 */ 0x00, /* 0000000 */ 0x00, /* 0000000 */ @@ -2746,7 +2746,7 @@ 0x00, /* 0000000 */ 0x00, /* 0000000 */ - /* 171 0xab '�' */ + /* 171 0xab '«' */ 0x60, /* 0110000 */ 0xe0, /* 1110000 */ 0x62, /* 0110001 */ @@ -2762,7 +2762,7 @@ 0x30, /* 0011000 */ 0x7c, /* 0111110 */ - /* 172 0xac '�' */ + /* 172 0xac '¬' */ 0x60, /* 0110000 */ 0xe0, /* 1110000 */ 0x62, /* 0110001 */ @@ -2778,7 +2778,7 @@ 0x0c, /* 0000110 */ 0x00, /* 0000000 */ - /* 173 0xad '�' */ + /* 173 0xad '­' */ 0x00, /* 0000000 */ 0x30, /* 0011000 */ 0x30, /* 0011000 */ @@ -2794,7 +2794,7 @@ 0x00, /* 0000000 */ 0x00, /* 0000000 */ - /* 174 0xae '�' */ + /* 174 0xae '®' */ 0x00, /* 0000000 */ 0x00, /* 0000000 */ 0x00, /* 0000000 */ @@ -2810,7 +2810,7 @@ 0x00, /* 0000000 */ 0x00, /* 0000000 */ - /* 175 0xaf '�' */ + /* 175 0xaf '¯' */ 0x00, /* 0000000 */ 0x00, /* 0000000 */ 0x00, /* 0000000 */ @@ -2826,7 +2826,7 @@ 0x00, /* 0000000 */ 0x00, /* 0000000 */ - /* 176 0xb0 '�' */ + /* 176 0xb0 '°' */ 0x88, /* 1000100 */ 0x22, /* 0010001 */ 0x88, /* 1000100 */ @@ -2842,7 +2842,7 @@ 0x88, /* 1000100 */ 0x22, /* 0010001 */ - /* 177 0xb1 '�' */ + /* 177 0xb1 '±' */ 0x54, /* 0101010 */ 0xaa, /* 1010101 */ 0x54, /* 0101010 */ @@ -2858,7 +2858,7 @@ 0x54, /* 0101010 */ 0xaa, /* 1010101 */ - /* 178 0xb2 '�' */ + /* 178 0xb2 '²' */ 0xee, /* 1110111 */ 0xba, /* 1011101 */ 0xee, /* 1110111 */ @@ -2874,7 +2874,7 @@ 0xee, /* 1110111 */ 0xba, /* 1011101 */ - /* 179 0xb3 '�' */ + /* 179 0xb3 '³' */ 0x30, /* 0011000 */ 0x30, /* 0011000 */ 0x30, /* 0011000 */ @@ -2890,7 +2890,7 @@ 0x30, /* 0011000 */ 0x30, /* 0011000 */ - /* 180 0xb4 '�' */ + /* 180 0xb4 '´' */ 0x30, /* 0011000 */ 0x30, /* 0011000 */ 0x30, /* 0011000 */ @@ -2906,7 +2906,7 @@ 0x30, /* 0011000 */ 0x30, /* 0011000 */ - /* 181 0xb5 '�' */ + /* 181 0xb5 'µ' */ 0x30, /* 0011000 */ 0x30, /* 0011000 */ 0x30, /* 0011000 */ @@ -2922,7 +2922,7 @@ 0x30, /* 0011000 */ 0x30, /* 0011000 */ - /* 182 0xb6 '�' */ + /* 182 0xb6 '¶' */ 0x6c, /* 0110110 */ 0x6c, /* 0110110 */ 0x6c, /* 0110110 */ @@ -2938,7 +2938,7 @@ 0x6c, /* 0110110 */ 0x6c, /* 0110110 */ - /* 183 0xb7 '�' */ + /* 183 0xb7 '·' */ 0x00, /* 0000000 */ 0x00, /* 0000000 */ 0x00, /* 0000000 */ @@ -2954,7 +2954,7 @@ 0x6c, /* 0110110 */ 0x6c, /* 0110110 */ - /* 184 0xb8 '�' */ + /* 184 0xb8 '¸' */ 0x00, /* 0000000 */ 0x00, /* 0000000 */ 0x00, /* 0000000 */ @@ -2970,7 +2970,7 @@ 0x30, /* 0011000 */ 0x30, /* 0011000 */ - /* 185 0xb9 '�' */ + /* 185 0xb9 '¹' */ 0x6c, /* 0110110 */ 0x6c, /* 0110110 */ 0x6c, /* 0110110 */ @@ -2986,7 +2986,7 @@ 0x6c, /* 0110110 */ 0x6c, /* 0110110 */ - /* 186 0xba '�' */ + /* 186 0xba 'º' */ 0x6c, /* 0110110 */ 0x6c, /* 0110110 */ 0x6c, /* 0110110 */ @@ -3002,7 +3002,7 @@ 0x6c, /* 0110110 */ 0x6c, /* 0110110 */ - /* 187 0xbb '�' */ + /* 187 0xbb '»' */ 0x00, /* 0000000 */ 0x00, /* 0000000 */ 0x00, /* 0000000 */ @@ -3018,7 +3018,7 @@ 0x6c, /* 0110110 */ 0x6c, /* 0110110 */ - /* 188 0xbc '�' */ + /* 188 0xbc '¼' */ 0x6c, /* 0110110 */ 0x6c, /* 0110110 */ 0x6c, /* 0110110 */ @@ -3034,7 +3034,7 @@ 0x00, /* 0000000 */ 0x00, /* 0000000 */ - /* 189 0xbd '�' */ + /* 189 0xbd '½' */ 0x6c, /* 0110110 */ 0x6c, /* 0110110 */ 0x6c, /* 0110110 */ @@ -3050,7 +3050,7 @@ 0x00, /* 0000000 */ 0x00, /* 0000000 */ - /* 190 0xbe '�' */ + /* 190 0xbe '¾' */ 0x30, /* 0011000 */ 0x30, /* 0011000 */ 0x30, /* 0011000 */ @@ -3066,7 +3066,7 @@ 0x00, /* 0000000 */ 0x00, /* 0000000 */ - /* 191 0xbf '�' */ + /* 191 0xbf '¿' */ 0x00, /* 0000000 */ 0x00, /* 0000000 */ 0x00, /* 0000000 */ @@ -3082,7 +3082,7 @@ 0x30, /* 0011000 */ 0x30, /* 0011000 */ - /* 192 0xc0 '�' */ + /* 192 0xc0 'À' */ 0x30, /* 0011000 */ 0x30, /* 0011000 */ 0x30, /* 0011000 */ @@ -3098,7 +3098,7 @@ 0x00, /* 0000000 */ 0x00, /* 0000000 */ - /* 193 0xc1 '�' */ + /* 193 0xc1 'Á' */ 0x30, /* 0011000 */ 0x30, /* 0011000 */ 0x30, /* 0011000 */ @@ -3114,7 +3114,7 @@ 0x00, /* 0000000 */ 0x00, /* 0000000 */ - /* 194 0xc2 '�' */ + /* 194 0xc2 'Â' */ 0x00, /* 0000000 */ 0x00, /* 0000000 */ 0x00, /* 0000000 */ @@ -3130,7 +3130,7 @@ 0x30, /* 0011000 */ 0x30, /* 0011000 */ - /* 195 0xc3 '�' */ + /* 195 0xc3 'Ã' */ 0x30, /* 0011000 */ 0x30, /* 0011000 */ 0x30, /* 0011000 */ @@ -3146,7 +3146,7 @@ 0x30, /* 0011000 */ 0x30, /* 0011000 */ - /* 196 0xc4 '�' */ + /* 196 0xc4 'Ä' */ 0x00, /* 0000000 */ 0x00, /* 0000000 */ 0x00, /* 0000000 */ @@ -3162,7 +3162,7 @@ 0x00, /* 0000000 */ 0x00, /* 0000000 */ - /* 197 0xc5 '�' */ + /* 197 0xc5 'Å' */ 0x30, /* 0011000 */ 0x30, /* 0011000 */ 0x30, /* 0011000 */ @@ -3178,7 +3178,7 @@ 0x30, /* 0011000 */ 0x30, /* 0011000 */ - /* 198 0xc6 '�' */ + /* 198 0xc6 'Æ' */ 0x30, /* 0011000 */ 0x30, /* 0011000 */ 0x30, /* 0011000 */ @@ -3194,7 +3194,7 @@ 0x30, /* 0011000 */ 0x30, /* 0011000 */ - /* 199 0xc7 '�' */ + /* 199 0xc7 'Ç' */ 0x6c, /* 0110110 */ 0x6c, /* 0110110 */ 0x6c, /* 0110110 */ @@ -3210,7 +3210,7 @@ 0x6c, /* 0110110 */ 0x6c, /* 0110110 */ - /* 200 0xc8 '�' */ + /* 200 0xc8 'È' */ 0x6c, /* 0110110 */ 0x6c, /* 0110110 */ 0x6c, /* 0110110 */ @@ -3226,7 +3226,7 @@ 0x00, /* 0000000 */ 0x00, /* 0000000 */ - /* 201 0xc9 '�' */ + /* 201 0xc9 'É' */ 0x00, /* 0000000 */ 0x00, /* 0000000 */ 0x00, /* 0000000 */ @@ -3242,7 +3242,7 @@ 0x6c, /* 0110110 */ 0x6c, /* 0110110 */ - /* 202 0xca '�' */ + /* 202 0xca 'Ê' */ 0x6c, /* 0110110 */ 0x6c, /* 0110110 */ 0x6c, /* 0110110 */ @@ -3258,7 +3258,7 @@ 0x00, /* 0000000 */ 0x00, /* 0000000 */ - /* 203 0xcb '�' */ + /* 203 0xcb 'Ë' */ 0x00, /* 0000000 */ 0x00, /* 0000000 */ 0x00, /* 0000000 */ @@ -3274,7 +3274,7 @@ 0x6c, /* 0110110 */ 0x6c, /* 0110110 */ - /* 204 0xcc '�' */ + /* 204 0xcc 'Ì' */ 0x6c, /* 0110110 */ 0x6c, /* 0110110 */ 0x6c, /* 0110110 */ @@ -3290,7 +3290,7 @@ 0x6c, /* 0110110 */ 0x6c, /* 0110110 */ - /* 205 0xcd '�' */ + /* 205 0xcd 'Í' */ 0x00, /* 0000000 */ 0x00, /* 0000000 */ 0x00, /* 0000000 */ @@ -3306,7 +3306,7 @@ 0x00, /* 0000000 */ 0x00, /* 0000000 */ - /* 206 0xce '�' */ + /* 206 0xce 'Î' */ 0x6c, /* 0110110 */ 0x6c, /* 0110110 */ 0x6c, /* 0110110 */ @@ -3322,7 +3322,7 @@ 0x6c, /* 0110110 */ 0x6c, /* 0110110 */ - /* 207 0xcf '�' */ + /* 207 0xcf 'Ï' */ 0x30, /* 0011000 */ 0x30, /* 0011000 */ 0x30, /* 0011000 */ @@ -3338,7 +3338,7 @@ 0x00, /* 0000000 */ 0x00, /* 0000000 */ - /* 208 0xd0 '�' */ + /* 208 0xd0 'Ð' */ 0x6c, /* 0110110 */ 0x6c, /* 0110110 */ 0x6c, /* 0110110 */ @@ -3354,7 +3354,7 @@ 0x00, /* 0000000 */ 0x00, /* 0000000 */ - /* 209 0xd1 '�' */ + /* 209 0xd1 'Ñ' */ 0x00, /* 0000000 */ 0x00, /* 0000000 */ 0x00, /* 0000000 */ @@ -3370,7 +3370,7 @@ 0x30, /* 0011000 */ 0x30, /* 0011000 */ - /* 210 0xd2 '�' */ + /* 210 0xd2 'Ò' */ 0x00, /* 0000000 */ 0x00, /* 0000000 */ 0x00, /* 0000000 */ @@ -3386,7 +3386,7 @@ 0x6c, /* 0110110 */ 0x6c, /* 0110110 */ - /* 211 0xd3 '�' */ + /* 211 0xd3 'Ó' */ 0x6c, /* 0110110 */ 0x6c, /* 0110110 */ 0x6c, /* 0110110 */ @@ -3402,7 +3402,7 @@ 0x00, /* 0000000 */ 0x00, /* 0000000 */ - /* 212 0xd4 '�' */ + /* 212 0xd4 'Ô' */ 0x30, /* 0011000 */ 0x30, /* 0011000 */ 0x30, /* 0011000 */ @@ -3418,7 +3418,7 @@ 0x00, /* 0000000 */ 0x00, /* 0000000 */ - /* 213 0xd5 '�' */ + /* 213 0xd5 'Õ' */ 0x00, /* 0000000 */ 0x00, /* 0000000 */ 0x00, /* 0000000 */ @@ -3434,7 +3434,7 @@ 0x30, /* 0011000 */ 0x30, /* 0011000 */ - /* 214 0xd6 '�' */ + /* 214 0xd6 'Ö' */ 0x00, /* 0000000 */ 0x00, /* 0000000 */ 0x00, /* 0000000 */ @@ -3450,7 +3450,7 @@ 0x6c, /* 0110110 */ 0x6c, /* 0110110 */ - /* 215 0xd7 '�' */ + /* 215 0xd7 '×' */ 0x6c, /* 0110110 */ 0x6c, /* 0110110 */ 0x6c, /* 0110110 */ @@ -3466,7 +3466,7 @@ 0x6c, /* 0110110 */ 0x6c, /* 0110110 */ - /* 216 0xd8 '�' */ + /* 216 0xd8 'Ø' */ 0x30, /* 0011000 */ 0x30, /* 0011000 */ 0x30, /* 0011000 */ @@ -3482,7 +3482,7 @@ 0x30, /* 0011000 */ 0x30, /* 0011000 */ - /* 217 0xd9 '�' */ + /* 217 0xd9 'Ù' */ 0x30, /* 0011000 */ 0x30, /* 0011000 */ 0x30, /* 0011000 */ @@ -3498,7 +3498,7 @@ 0x00, /* 0000000 */ 0x00, /* 0000000 */ - /* 218 0xda '�' */ + /* 218 0xda 'Ú' */ 0x00, /* 0000000 */ 0x00, /* 0000000 */ 0x00, /* 0000000 */ @@ -3514,7 +3514,7 @@ 0x30, /* 0011000 */ 0x30, /* 0011000 */ - /* 219 0xdb '�' */ + /* 219 0xdb 'Û' */ 0xfe, /* 1111111 */ 0xfe, /* 1111111 */ 0xfe, /* 1111111 */ @@ -3530,7 +3530,7 @@ 0xfe, /* 1111111 */ 0xfe, /* 1111111 */ - /* 220 0xdc '�' */ + /* 220 0xdc 'Ü' */ 0x00, /* 0000000 */ 0x00, /* 0000000 */ 0x00, /* 0000000 */ @@ -3546,7 +3546,7 @@ 0xfe, /* 1111111 */ 0xfe, /* 1111111 */ - /* 221 0xdd '�' */ + /* 221 0xdd 'Ý' */ 0xe0, /* 1110000 */ 0xe0, /* 1110000 */ 0xe0, /* 1110000 */ @@ -3562,7 +3562,7 @@ 0xe0, /* 1110000 */ 0xe0, /* 1110000 */ - /* 222 0xde '�' */ + /* 222 0xde 'Þ' */ 0x1e, /* 0001111 */ 0x1e, /* 0001111 */ 0x1e, /* 0001111 */ @@ -3578,7 +3578,7 @@ 0x1e, /* 0001111 */ 0x1e, /* 0001111 */ - /* 223 0xdf '�' */ + /* 223 0xdf 'ß' */ 0xfe, /* 1111111 */ 0xfe, /* 1111111 */ 0xfe, /* 1111111 */ @@ -3594,7 +3594,7 @@ 0x00, /* 0000000 */ 0x00, /* 0000000 */ - /* 224 0xe0 '�' */ + /* 224 0xe0 'à' */ 0x00, /* 0000000 */ 0x00, /* 0000000 */ 0x00, /* 0000000 */ @@ -3610,7 +3610,7 @@ 0x00, /* 0000000 */ 0x00, /* 0000000 */ - /* 225 0xe1 '�' */ + /* 225 0xe1 'á' */ 0x00, /* 0000000 */ 0x78, /* 0111100 */ 0xcc, /* 1100110 */ @@ -3626,7 +3626,7 @@ 0x00, /* 0000000 */ 0x00, /* 0000000 */ - /* 226 0xe2 '�' */ + /* 226 0xe2 'â' */ 0x00, /* 0000000 */ 0xfc, /* 1111110 */ 0xcc, /* 1100110 */ @@ -3642,7 +3642,7 @@ 0x00, /* 0000000 */ 0x00, /* 0000000 */ - /* 227 0xe3 '�' */ + /* 227 0xe3 'ã' */ 0x00, /* 0000000 */ 0x00, /* 0000000 */ 0xfe, /* 1111111 */ @@ -3658,7 +3658,7 @@ 0x00, /* 0000000 */ 0x00, /* 0000000 */ - /* 228 0xe4 '�' */ + /* 228 0xe4 'ä' */ 0x00, /* 0000000 */ 0xfc, /* 1111110 */ 0xcc, /* 1100110 */ @@ -3674,7 +3674,7 @@ 0x00, /* 0000000 */ 0x00, /* 0000000 */ - /* 229 0xe5 '�' */ + /* 229 0xe5 'å' */ 0x00, /* 0000000 */ 0x00, /* 0000000 */ 0x00, /* 0000000 */ @@ -3690,7 +3690,7 @@ 0x00, /* 0000000 */ 0x00, /* 0000000 */ - /* 230 0xe6 '�' */ + /* 230 0xe6 'æ' */ 0x00, /* 0000000 */ 0x00, /* 0000000 */ 0x00, /* 0000000 */ @@ -3706,7 +3706,7 @@ 0xc0, /* 1100000 */ 0x80, /* 1000000 */ - /* 231 0xe7 '�' */ + /* 231 0xe7 'ç' */ 0x00, /* 0000000 */ 0x00, /* 0000000 */ 0x00, /* 0000000 */ @@ -3722,7 +3722,7 @@ 0x00, /* 0000000 */ 0x00, /* 0000000 */ - /* 232 0xe8 '�' */ + /* 232 0xe8 'è' */ 0x00, /* 0000000 */ 0xfc, /* 1111110 */ 0x30, /* 0011000 */ @@ -3738,7 +3738,7 @@ 0x00, /* 0000000 */ 0x00, /* 0000000 */ - /* 233 0xe9 '�' */ + /* 233 0xe9 'é' */ 0x00, /* 0000000 */ 0x38, /* 0011100 */ 0x6c, /* 0110110 */ @@ -3754,7 +3754,7 @@ 0x00, /* 0000000 */ 0x00, /* 0000000 */ - /* 234 0xea '�' */ + /* 234 0xea 'ê' */ 0x00, /* 0000000 */ 0x38, /* 0011100 */ 0x6c, /* 0110110 */ @@ -3770,7 +3770,7 @@ 0x00, /* 0000000 */ 0x00, /* 0000000 */ - /* 235 0xeb '�' */ + /* 235 0xeb 'ë' */ 0x00, /* 0000000 */ 0x3c, /* 0011110 */ 0x60, /* 0110000 */ @@ -3786,7 +3786,7 @@ 0x00, /* 0000000 */ 0x00, /* 0000000 */ - /* 236 0xec '�' */ + /* 236 0xec 'ì' */ 0x00, /* 0000000 */ 0x00, /* 0000000 */ 0x00, /* 0000000 */ @@ -3802,7 +3802,7 @@ 0x00, /* 0000000 */ 0x00, /* 0000000 */ - /* 237 0xed '�' */ + /* 237 0xed 'í' */ 0x00, /* 0000000 */ 0x00, /* 0000000 */ 0x06, /* 0000011 */ @@ -3818,7 +3818,7 @@ 0x00, /* 0000000 */ 0x00, /* 0000000 */ - /* 238 0xee '�' */ + /* 238 0xee 'î' */ 0x00, /* 0000000 */ 0x1c, /* 0001110 */ 0x30, /* 0011000 */ @@ -3834,7 +3834,7 @@ 0x00, /* 0000000 */ 0x00, /* 0000000 */ - /* 239 0xef '�' */ + /* 239 0xef 'ï' */ 0x00, /* 0000000 */ 0x00, /* 0000000 */ 0x78, /* 0111100 */ @@ -3850,7 +3850,7 @@ 0x00, /* 0000000 */ 0x00, /* 0000000 */ - /* 240 0xf0 '�' */ + /* 240 0xf0 'ð' */ 0x00, /* 0000000 */ 0x00, /* 0000000 */ 0x00, /* 0000000 */ @@ -3866,7 +3866,7 @@ 0x00, /* 0000000 */ 0x00, /* 0000000 */ - /* 241 0xf1 '�' */ + /* 241 0xf1 'ñ' */ 0x00, /* 0000000 */ 0x00, /* 0000000 */ 0x00, /* 0000000 */ @@ -3882,7 +3882,7 @@ 0x00, /* 0000000 */ 0x00, /* 0000000 */ - /* 242 0xf2 '�' */ + /* 242 0xf2 'ò' */ 0x00, /* 0000000 */ 0x00, /* 0000000 */ 0x60, /* 0110000 */ @@ -3898,7 +3898,7 @@ 0x00, /* 0000000 */ 0x00, /* 0000000 */ - /* 243 0xf3 '�' */ + /* 243 0xf3 'ó' */ 0x00, /* 0000000 */ 0x00, /* 0000000 */ 0x18, /* 0001100 */ @@ -3914,7 +3914,7 @@ 0x00, /* 0000000 */ 0x00, /* 0000000 */ - /* 244 0xf4 '�' */ + /* 244 0xf4 'ô' */ 0x00, /* 0000000 */ 0x1c, /* 0001110 */ 0x36, /* 0011011 */ @@ -3930,7 +3930,7 @@ 0x30, /* 0011000 */ 0x30, /* 0011000 */ - /* 245 0xf5 '�' */ + /* 245 0xf5 'õ' */ 0x18, /* 0001100 */ 0x18, /* 0001100 */ 0x18, /* 0001100 */ @@ -3946,7 +3946,7 @@ 0x00, /* 0000000 */ 0x00, /* 0000000 */ - /* 246 0xf6 '�' */ + /* 246 0xf6 'ö' */ 0x00, /* 0000000 */ 0x00, /* 0000000 */ 0x00, /* 0000000 */ @@ -3962,7 +3962,7 @@ 0x00, /* 0000000 */ 0x00, /* 0000000 */ - /* 247 0xf7 '�' */ + /* 247 0xf7 '÷' */ 0x00, /* 0000000 */ 0x00, /* 0000000 */ 0x00, /* 0000000 */ @@ -3978,7 +3978,7 @@ 0x00, /* 0000000 */ 0x00, /* 0000000 */ - /* 248 0xf8 '�' */ + /* 248 0xf8 'ø' */ 0x38, /* 0011100 */ 0x6c, /* 0110110 */ 0x6c, /* 0110110 */ @@ -3994,7 +3994,7 @@ 0x00, /* 0000000 */ 0x00, /* 0000000 */ - /* 249 0xf9 '�' */ + /* 249 0xf9 'ù' */ 0x00, /* 0000000 */ 0x00, /* 0000000 */ 0x00, /* 0000000 */ @@ -4010,7 +4010,7 @@ 0x00, /* 0000000 */ 0x00, /* 0000000 */ - /* 250 0xfa '�' */ + /* 250 0xfa 'ú' */ 0x00, /* 0000000 */ 0x00, /* 0000000 */ 0x00, /* 0000000 */ @@ -4026,7 +4026,7 @@ 0x00, /* 0000000 */ 0x00, /* 0000000 */ - /* 251 0xfb '�' */ + /* 251 0xfb 'û' */ 0x1e, /* 0001111 */ 0x18, /* 0001100 */ 0x18, /* 0001100 */ @@ -4042,7 +4042,7 @@ 0x00, /* 0000000 */ 0x00, /* 0000000 */ - /* 252 0xfc '�' */ + /* 252 0xfc 'ü' */ 0xd8, /* 1101100 */ 0x6c, /* 0110110 */ 0x6c, /* 0110110 */ @@ -4058,7 +4058,7 @@ 0x00, /* 0000000 */ 0x00, /* 0000000 */ - /* 253 0xfd '�' */ + /* 253 0xfd 'ý' */ 0x78, /* 0111100 */ 0xcc, /* 1100110 */ 0x18, /* 0001100 */ @@ -4074,7 +4074,7 @@ 0x00, /* 0000000 */ 0x00, /* 0000000 */ - /* 254 0xfe '�' */ + /* 254 0xfe 'þ' */ 0x00, /* 0000000 */ 0x00, /* 0000000 */ 0x00, /* 0000000 */ @@ -4090,7 +4090,7 @@ 0x00, /* 0000000 */ 0x00, /* 0000000 */ - /* 255 0xff '�' */ + /* 255 0xff 'ÿ' */ 0x00, /* 0000000 */ 0x00, /* 0000000 */ 0x00, /* 0000000 */ diff --git a/lib/fonts/font_8x16.c b/lib/fonts/font_8x16.c index c5c14fc..e6d40d0 100644 --- a/lib/fonts/font_8x16.c +++ b/lib/fonts/font_8x16.c @@ -2316,7 +2316,7 @@ 0x00, /* 00000000 */ 0x00, /* 00000000 */ - /* 128 0x80 '�' */ + /* 128 0x80 '€' */ 0x00, /* 00000000 */ 0x00, /* 00000000 */ 0x3c, /* 00111100 */ @@ -2334,7 +2334,7 @@ 0x00, /* 00000000 */ 0x00, /* 00000000 */ - /* 129 0x81 '�' */ + /* 129 0x81 '' */ 0x00, /* 00000000 */ 0x00, /* 00000000 */ 0xcc, /* 11001100 */ @@ -2352,7 +2352,7 @@ 0x00, /* 00000000 */ 0x00, /* 00000000 */ - /* 130 0x82 '�' */ + /* 130 0x82 '‚' */ 0x00, /* 00000000 */ 0x0c, /* 00001100 */ 0x18, /* 00011000 */ @@ -2370,7 +2370,7 @@ 0x00, /* 00000000 */ 0x00, /* 00000000 */ - /* 131 0x83 '�' */ + /* 131 0x83 'ƒ' */ 0x00, /* 00000000 */ 0x10, /* 00010000 */ 0x38, /* 00111000 */ @@ -2388,7 +2388,7 @@ 0x00, /* 00000000 */ 0x00, /* 00000000 */ - /* 132 0x84 '�' */ + /* 132 0x84 '„' */ 0x00, /* 00000000 */ 0x00, /* 00000000 */ 0xcc, /* 11001100 */ @@ -2406,7 +2406,7 @@ 0x00, /* 00000000 */ 0x00, /* 00000000 */ - /* 133 0x85 '�' */ + /* 133 0x85 '…' */ 0x00, /* 00000000 */ 0x60, /* 01100000 */ 0x30, /* 00110000 */ @@ -2424,7 +2424,7 @@ 0x00, /* 00000000 */ 0x00, /* 00000000 */ - /* 134 0x86 '�' */ + /* 134 0x86 '†' */ 0x00, /* 00000000 */ 0x38, /* 00111000 */ 0x6c, /* 01101100 */ @@ -2442,7 +2442,7 @@ 0x00, /* 00000000 */ 0x00, /* 00000000 */ - /* 135 0x87 '�' */ + /* 135 0x87 '‡' */ 0x00, /* 00000000 */ 0x00, /* 00000000 */ 0x00, /* 00000000 */ @@ -2460,7 +2460,7 @@ 0x00, /* 00000000 */ 0x00, /* 00000000 */ - /* 136 0x88 '�' */ + /* 136 0x88 'ˆ' */ 0x00, /* 00000000 */ 0x10, /* 00010000 */ 0x38, /* 00111000 */ @@ -2478,7 +2478,7 @@ 0x00, /* 00000000 */ 0x00, /* 00000000 */ - /* 137 0x89 '�' */ + /* 137 0x89 '‰' */ 0x00, /* 00000000 */ 0x00, /* 00000000 */ 0xc6, /* 11000110 */ @@ -2496,7 +2496,7 @@ 0x00, /* 00000000 */ 0x00, /* 00000000 */ - /* 138 0x8a '�' */ + /* 138 0x8a 'Š' */ 0x00, /* 00000000 */ 0x60, /* 01100000 */ 0x30, /* 00110000 */ @@ -2514,7 +2514,7 @@ 0x00, /* 00000000 */ 0x00, /* 00000000 */ - /* 139 0x8b '�' */ + /* 139 0x8b '‹' */ 0x00, /* 00000000 */ 0x00, /* 00000000 */ 0x66, /* 01100110 */ @@ -2532,7 +2532,7 @@ 0x00, /* 00000000 */ 0x00, /* 00000000 */ - /* 140 0x8c '�' */ + /* 140 0x8c 'Œ' */ 0x00, /* 00000000 */ 0x18, /* 00011000 */ 0x3c, /* 00111100 */ @@ -2550,7 +2550,7 @@ 0x00, /* 00000000 */ 0x00, /* 00000000 */ - /* 141 0x8d '�' */ + /* 141 0x8d '' */ 0x00, /* 00000000 */ 0x60, /* 01100000 */ 0x30, /* 00110000 */ @@ -2568,7 +2568,7 @@ 0x00, /* 00000000 */ 0x00, /* 00000000 */ - /* 142 0x8e '�' */ + /* 142 0x8e 'Ž' */ 0x00, /* 00000000 */ 0xc6, /* 11000110 */ 0x00, /* 00000000 */ @@ -2586,7 +2586,7 @@ 0x00, /* 00000000 */ 0x00, /* 00000000 */ - /* 143 0x8f '�' */ + /* 143 0x8f '' */ 0x38, /* 00111000 */ 0x6c, /* 01101100 */ 0x38, /* 00111000 */ @@ -2604,7 +2604,7 @@ 0x00, /* 00000000 */ 0x00, /* 00000000 */ - /* 144 0x90 '�' */ + /* 144 0x90 '' */ 0x0c, /* 00001100 */ 0x18, /* 00011000 */ 0x00, /* 00000000 */ @@ -2622,7 +2622,7 @@ 0x00, /* 00000000 */ 0x00, /* 00000000 */ - /* 145 0x91 '�' */ + /* 145 0x91 '‘' */ 0x00, /* 00000000 */ 0x00, /* 00000000 */ 0x00, /* 00000000 */ @@ -2640,7 +2640,7 @@ 0x00, /* 00000000 */ 0x00, /* 00000000 */ - /* 146 0x92 '�' */ + /* 146 0x92 '’' */ 0x00, /* 00000000 */ 0x00, /* 00000000 */ 0x3e, /* 00111110 */ @@ -2658,7 +2658,7 @@ 0x00, /* 00000000 */ 0x00, /* 00000000 */ - /* 147 0x93 '�' */ + /* 147 0x93 '“' */ 0x00, /* 00000000 */ 0x10, /* 00010000 */ 0x38, /* 00111000 */ @@ -2676,7 +2676,7 @@ 0x00, /* 00000000 */ 0x00, /* 00000000 */ - /* 148 0x94 '�' */ + /* 148 0x94 '”' */ 0x00, /* 00000000 */ 0x00, /* 00000000 */ 0xc6, /* 11000110 */ @@ -2694,7 +2694,7 @@ 0x00, /* 00000000 */ 0x00, /* 00000000 */ - /* 149 0x95 '�' */ + /* 149 0x95 '•' */ 0x00, /* 00000000 */ 0x60, /* 01100000 */ 0x30, /* 00110000 */ @@ -2712,7 +2712,7 @@ 0x00, /* 00000000 */ 0x00, /* 00000000 */ - /* 150 0x96 '�' */ + /* 150 0x96 '–' */ 0x00, /* 00000000 */ 0x30, /* 00110000 */ 0x78, /* 01111000 */ @@ -2730,7 +2730,7 @@ 0x00, /* 00000000 */ 0x00, /* 00000000 */ - /* 151 0x97 '�' */ + /* 151 0x97 '—' */ 0x00, /* 00000000 */ 0x60, /* 01100000 */ 0x30, /* 00110000 */ @@ -2748,7 +2748,7 @@ 0x00, /* 00000000 */ 0x00, /* 00000000 */ - /* 152 0x98 '�' */ + /* 152 0x98 '˜' */ 0x00, /* 00000000 */ 0x00, /* 00000000 */ 0xc6, /* 11000110 */ @@ -2766,7 +2766,7 @@ 0x78, /* 01111000 */ 0x00, /* 00000000 */ - /* 153 0x99 '�' */ + /* 153 0x99 '™' */ 0x00, /* 00000000 */ 0xc6, /* 11000110 */ 0x00, /* 00000000 */ @@ -2784,7 +2784,7 @@ 0x00, /* 00000000 */ 0x00, /* 00000000 */ - /* 154 0x9a '�' */ + /* 154 0x9a 'š' */ 0x00, /* 00000000 */ 0xc6, /* 11000110 */ 0x00, /* 00000000 */ @@ -2802,7 +2802,7 @@ 0x00, /* 00000000 */ 0x00, /* 00000000 */ - /* 155 0x9b '�' */ + /* 155 0x9b '›' */ 0x00, /* 00000000 */ 0x18, /* 00011000 */ 0x18, /* 00011000 */ @@ -2820,7 +2820,7 @@ 0x00, /* 00000000 */ 0x00, /* 00000000 */ - /* 156 0x9c '�' */ + /* 156 0x9c 'œ' */ 0x00, /* 00000000 */ 0x38, /* 00111000 */ 0x6c, /* 01101100 */ @@ -2838,7 +2838,7 @@ 0x00, /* 00000000 */ 0x00, /* 00000000 */ - /* 157 0x9d '�' */ + /* 157 0x9d '' */ 0x00, /* 00000000 */ 0x00, /* 00000000 */ 0x66, /* 01100110 */ @@ -2856,7 +2856,7 @@ 0x00, /* 00000000 */ 0x00, /* 00000000 */ - /* 158 0x9e '�' */ + /* 158 0x9e 'ž' */ 0x00, /* 00000000 */ 0xf8, /* 11111000 */ 0xcc, /* 11001100 */ @@ -2874,7 +2874,7 @@ 0x00, /* 00000000 */ 0x00, /* 00000000 */ - /* 159 0x9f '�' */ + /* 159 0x9f 'Ÿ' */ 0x00, /* 00000000 */ 0x0e, /* 00001110 */ 0x1b, /* 00011011 */ @@ -2892,7 +2892,7 @@ 0x00, /* 00000000 */ 0x00, /* 00000000 */ - /* 160 0xa0 '�' */ + /* 160 0xa0 ' ' */ 0x00, /* 00000000 */ 0x18, /* 00011000 */ 0x30, /* 00110000 */ @@ -2910,7 +2910,7 @@ 0x00, /* 00000000 */ 0x00, /* 00000000 */ - /* 161 0xa1 '�' */ + /* 161 0xa1 '¡' */ 0x00, /* 00000000 */ 0x0c, /* 00001100 */ 0x18, /* 00011000 */ @@ -2928,7 +2928,7 @@ 0x00, /* 00000000 */ 0x00, /* 00000000 */ - /* 162 0xa2 '�' */ + /* 162 0xa2 '¢' */ 0x00, /* 00000000 */ 0x18, /* 00011000 */ 0x30, /* 00110000 */ @@ -2946,7 +2946,7 @@ 0x00, /* 00000000 */ 0x00, /* 00000000 */ - /* 163 0xa3 '�' */ + /* 163 0xa3 '£' */ 0x00, /* 00000000 */ 0x18, /* 00011000 */ 0x30, /* 00110000 */ @@ -2964,7 +2964,7 @@ 0x00, /* 00000000 */ 0x00, /* 00000000 */ - /* 164 0xa4 '�' */ + /* 164 0xa4 '¤' */ 0x00, /* 00000000 */ 0x00, /* 00000000 */ 0x76, /* 01110110 */ @@ -2982,7 +2982,7 @@ 0x00, /* 00000000 */ 0x00, /* 00000000 */ - /* 165 0xa5 '�' */ + /* 165 0xa5 '¥' */ 0x76, /* 01110110 */ 0xdc, /* 11011100 */ 0x00, /* 00000000 */ @@ -3000,7 +3000,7 @@ 0x00, /* 00000000 */ 0x00, /* 00000000 */ - /* 166 0xa6 '�' */ + /* 166 0xa6 '¦' */ 0x00, /* 00000000 */ 0x00, /* 00000000 */ 0x3c, /* 00111100 */ @@ -3018,7 +3018,7 @@ 0x00, /* 00000000 */ 0x00, /* 00000000 */ - /* 167 0xa7 '�' */ + /* 167 0xa7 '§' */ 0x00, /* 00000000 */ 0x00, /* 00000000 */ 0x38, /* 00111000 */ @@ -3036,7 +3036,7 @@ 0x00, /* 00000000 */ 0x00, /* 00000000 */ - /* 168 0xa8 '�' */ + /* 168 0xa8 '¨' */ 0x00, /* 00000000 */ 0x00, /* 00000000 */ 0x30, /* 00110000 */ @@ -3054,7 +3054,7 @@ 0x00, /* 00000000 */ 0x00, /* 00000000 */ - /* 169 0xa9 '�' */ + /* 169 0xa9 '©' */ 0x00, /* 00000000 */ 0x00, /* 00000000 */ 0x00, /* 00000000 */ @@ -3072,7 +3072,7 @@ 0x00, /* 00000000 */ 0x00, /* 00000000 */ - /* 170 0xaa '�' */ + /* 170 0xaa 'ª' */ 0x00, /* 00000000 */ 0x00, /* 00000000 */ 0x00, /* 00000000 */ @@ -3090,7 +3090,7 @@ 0x00, /* 00000000 */ 0x00, /* 00000000 */ - /* 171 0xab '�' */ + /* 171 0xab '«' */ 0x00, /* 00000000 */ 0x60, /* 01100000 */ 0xe0, /* 11100000 */ @@ -3108,7 +3108,7 @@ 0x00, /* 00000000 */ 0x00, /* 00000000 */ - /* 172 0xac '�' */ + /* 172 0xac '¬' */ 0x00, /* 00000000 */ 0x60, /* 01100000 */ 0xe0, /* 11100000 */ @@ -3126,7 +3126,7 @@ 0x00, /* 00000000 */ 0x00, /* 00000000 */ - /* 173 0xad '�' */ + /* 173 0xad '­' */ 0x00, /* 00000000 */ 0x00, /* 00000000 */ 0x18, /* 00011000 */ @@ -3144,7 +3144,7 @@ 0x00, /* 00000000 */ 0x00, /* 00000000 */ - /* 174 0xae '�' */ + /* 174 0xae '®' */ 0x00, /* 00000000 */ 0x00, /* 00000000 */ 0x00, /* 00000000 */ @@ -3162,7 +3162,7 @@ 0x00, /* 00000000 */ 0x00, /* 00000000 */ - /* 175 0xaf '�' */ + /* 175 0xaf '¯' */ 0x00, /* 00000000 */ 0x00, /* 00000000 */ 0x00, /* 00000000 */ @@ -3180,7 +3180,7 @@ 0x00, /* 00000000 */ 0x00, /* 00000000 */ - /* 176 0xb0 '�' */ + /* 176 0xb0 '°' */ 0x11, /* 00010001 */ 0x44, /* 01000100 */ 0x11, /* 00010001 */ @@ -3198,7 +3198,7 @@ 0x11, /* 00010001 */ 0x44, /* 01000100 */ - /* 177 0xb1 '�' */ + /* 177 0xb1 '±' */ 0x55, /* 01010101 */ 0xaa, /* 10101010 */ 0x55, /* 01010101 */ @@ -3216,7 +3216,7 @@ 0x55, /* 01010101 */ 0xaa, /* 10101010 */ - /* 178 0xb2 '�' */ + /* 178 0xb2 '²' */ 0xdd, /* 11011101 */ 0x77, /* 01110111 */ 0xdd, /* 11011101 */ @@ -3234,7 +3234,7 @@ 0xdd, /* 11011101 */ 0x77, /* 01110111 */ - /* 179 0xb3 '�' */ + /* 179 0xb3 '³' */ 0x18, /* 00011000 */ 0x18, /* 00011000 */ 0x18, /* 00011000 */ @@ -3252,7 +3252,7 @@ 0x18, /* 00011000 */ 0x18, /* 00011000 */ - /* 180 0xb4 '�' */ + /* 180 0xb4 '´' */ 0x18, /* 00011000 */ 0x18, /* 00011000 */ 0x18, /* 00011000 */ @@ -3270,7 +3270,7 @@ 0x18, /* 00011000 */ 0x18, /* 00011000 */ - /* 181 0xb5 '�' */ + /* 181 0xb5 'µ' */ 0x18, /* 00011000 */ 0x18, /* 00011000 */ 0x18, /* 00011000 */ @@ -3288,7 +3288,7 @@ 0x18, /* 00011000 */ 0x18, /* 00011000 */ - /* 182 0xb6 '�' */ + /* 182 0xb6 '¶' */ 0x36, /* 00110110 */ 0x36, /* 00110110 */ 0x36, /* 00110110 */ @@ -3306,7 +3306,7 @@ 0x36, /* 00110110 */ 0x36, /* 00110110 */ - /* 183 0xb7 '�' */ + /* 183 0xb7 '·' */ 0x00, /* 00000000 */ 0x00, /* 00000000 */ 0x00, /* 00000000 */ @@ -3324,7 +3324,7 @@ 0x36, /* 00110110 */ 0x36, /* 00110110 */ - /* 184 0xb8 '�' */ + /* 184 0xb8 '¸' */ 0x00, /* 00000000 */ 0x00, /* 00000000 */ 0x00, /* 00000000 */ @@ -3342,7 +3342,7 @@ 0x18, /* 00011000 */ 0x18, /* 00011000 */ - /* 185 0xb9 '�' */ + /* 185 0xb9 '¹' */ 0x36, /* 00110110 */ 0x36, /* 00110110 */ 0x36, /* 00110110 */ @@ -3360,7 +3360,7 @@ 0x36, /* 00110110 */ 0x36, /* 00110110 */ - /* 186 0xba '�' */ + /* 186 0xba 'º' */ 0x36, /* 00110110 */ 0x36, /* 00110110 */ 0x36, /* 00110110 */ @@ -3378,7 +3378,7 @@ 0x36, /* 00110110 */ 0x36, /* 00110110 */ - /* 187 0xbb '�' */ + /* 187 0xbb '»' */ 0x00, /* 00000000 */ 0x00, /* 00000000 */ 0x00, /* 00000000 */ @@ -3396,7 +3396,7 @@ 0x36, /* 00110110 */ 0x36, /* 00110110 */ - /* 188 0xbc '�' */ + /* 188 0xbc '¼' */ 0x36, /* 00110110 */ 0x36, /* 00110110 */ 0x36, /* 00110110 */ @@ -3414,7 +3414,7 @@ 0x00, /* 00000000 */ 0x00, /* 00000000 */ - /* 189 0xbd '�' */ + /* 189 0xbd '½' */ 0x36, /* 00110110 */ 0x36, /* 00110110 */ 0x36, /* 00110110 */ @@ -3432,7 +3432,7 @@ 0x00, /* 00000000 */ 0x00, /* 00000000 */ - /* 190 0xbe '�' */ + /* 190 0xbe '¾' */ 0x18, /* 00011000 */ 0x18, /* 00011000 */ 0x18, /* 00011000 */ @@ -3450,7 +3450,7 @@ 0x00, /* 00000000 */ 0x00, /* 00000000 */ - /* 191 0xbf '�' */ + /* 191 0xbf '¿' */ 0x00, /* 00000000 */ 0x00, /* 00000000 */ 0x00, /* 00000000 */ @@ -3468,7 +3468,7 @@ 0x18, /* 00011000 */ 0x18, /* 00011000 */ - /* 192 0xc0 '�' */ + /* 192 0xc0 'À' */ 0x18, /* 00011000 */ 0x18, /* 00011000 */ 0x18, /* 00011000 */ @@ -3486,7 +3486,7 @@ 0x00, /* 00000000 */ 0x00, /* 00000000 */ - /* 193 0xc1 '�' */ + /* 193 0xc1 'Á' */ 0x18, /* 00011000 */ 0x18, /* 00011000 */ 0x18, /* 00011000 */ @@ -3504,7 +3504,7 @@ 0x00, /* 00000000 */ 0x00, /* 00000000 */ - /* 194 0xc2 '�' */ + /* 194 0xc2 'Â' */ 0x00, /* 00000000 */ 0x00, /* 00000000 */ 0x00, /* 00000000 */ @@ -3522,7 +3522,7 @@ 0x18, /* 00011000 */ 0x18, /* 00011000 */ - /* 195 0xc3 '�' */ + /* 195 0xc3 'Ã' */ 0x18, /* 00011000 */ 0x18, /* 00011000 */ 0x18, /* 00011000 */ @@ -3540,7 +3540,7 @@ 0x18, /* 00011000 */ 0x18, /* 00011000 */ - /* 196 0xc4 '�' */ + /* 196 0xc4 'Ä' */ 0x00, /* 00000000 */ 0x00, /* 00000000 */ 0x00, /* 00000000 */ @@ -3558,7 +3558,7 @@ 0x00, /* 00000000 */ 0x00, /* 00000000 */ - /* 197 0xc5 '�' */ + /* 197 0xc5 'Å' */ 0x18, /* 00011000 */ 0x18, /* 00011000 */ 0x18, /* 00011000 */ @@ -3576,7 +3576,7 @@ 0x18, /* 00011000 */ 0x18, /* 00011000 */ - /* 198 0xc6 '�' */ + /* 198 0xc6 'Æ' */ 0x18, /* 00011000 */ 0x18, /* 00011000 */ 0x18, /* 00011000 */ @@ -3594,7 +3594,7 @@ 0x18, /* 00011000 */ 0x18, /* 00011000 */ - /* 199 0xc7 '�' */ + /* 199 0xc7 'Ç' */ 0x36, /* 00110110 */ 0x36, /* 00110110 */ 0x36, /* 00110110 */ @@ -3612,7 +3612,7 @@ 0x36, /* 00110110 */ 0x36, /* 00110110 */ - /* 200 0xc8 '�' */ + /* 200 0xc8 'È' */ 0x36, /* 00110110 */ 0x36, /* 00110110 */ 0x36, /* 00110110 */ @@ -3630,7 +3630,7 @@ 0x00, /* 00000000 */ 0x00, /* 00000000 */ - /* 201 0xc9 '�' */ + /* 201 0xc9 'É' */ 0x00, /* 00000000 */ 0x00, /* 00000000 */ 0x00, /* 00000000 */ @@ -3648,7 +3648,7 @@ 0x36, /* 00110110 */ 0x36, /* 00110110 */ - /* 202 0xca '�' */ + /* 202 0xca 'Ê' */ 0x36, /* 00110110 */ 0x36, /* 00110110 */ 0x36, /* 00110110 */ @@ -3666,7 +3666,7 @@ 0x00, /* 00000000 */ 0x00, /* 00000000 */ - /* 203 0xcb '�' */ + /* 203 0xcb 'Ë' */ 0x00, /* 00000000 */ 0x00, /* 00000000 */ 0x00, /* 00000000 */ @@ -3684,7 +3684,7 @@ 0x36, /* 00110110 */ 0x36, /* 00110110 */ - /* 204 0xcc '�' */ + /* 204 0xcc 'Ì' */ 0x36, /* 00110110 */ 0x36, /* 00110110 */ 0x36, /* 00110110 */ @@ -3702,7 +3702,7 @@ 0x36, /* 00110110 */ 0x36, /* 00110110 */ - /* 205 0xcd '�' */ + /* 205 0xcd 'Í' */ 0x00, /* 00000000 */ 0x00, /* 00000000 */ 0x00, /* 00000000 */ @@ -3720,7 +3720,7 @@ 0x00, /* 00000000 */ 0x00, /* 00000000 */ - /* 206 0xce '�' */ + /* 206 0xce 'Î' */ 0x36, /* 00110110 */ 0x36, /* 00110110 */ 0x36, /* 00110110 */ @@ -3738,7 +3738,7 @@ 0x36, /* 00110110 */ 0x36, /* 00110110 */ - /* 207 0xcf '�' */ + /* 207 0xcf 'Ï' */ 0x18, /* 00011000 */ 0x18, /* 00011000 */ 0x18, /* 00011000 */ @@ -3756,7 +3756,7 @@ 0x00, /* 00000000 */ 0x00, /* 00000000 */ - /* 208 0xd0 '�' */ + /* 208 0xd0 'Ð' */ 0x36, /* 00110110 */ 0x36, /* 00110110 */ 0x36, /* 00110110 */ @@ -3774,7 +3774,7 @@ 0x00, /* 00000000 */ 0x00, /* 00000000 */ - /* 209 0xd1 '�' */ + /* 209 0xd1 'Ñ' */ 0x00, /* 00000000 */ 0x00, /* 00000000 */ 0x00, /* 00000000 */ @@ -3792,7 +3792,7 @@ 0x18, /* 00011000 */ 0x18, /* 00011000 */ - /* 210 0xd2 '�' */ + /* 210 0xd2 'Ò' */ 0x00, /* 00000000 */ 0x00, /* 00000000 */ 0x00, /* 00000000 */ @@ -3810,7 +3810,7 @@ 0x36, /* 00110110 */ 0x36, /* 00110110 */ - /* 211 0xd3 '�' */ + /* 211 0xd3 'Ó' */ 0x36, /* 00110110 */ 0x36, /* 00110110 */ 0x36, /* 00110110 */ @@ -3828,7 +3828,7 @@ 0x00, /* 00000000 */ 0x00, /* 00000000 */ - /* 212 0xd4 '�' */ + /* 212 0xd4 'Ô' */ 0x18, /* 00011000 */ 0x18, /* 00011000 */ 0x18, /* 00011000 */ @@ -3846,7 +3846,7 @@ 0x00, /* 00000000 */ 0x00, /* 00000000 */ - /* 213 0xd5 '�' */ + /* 213 0xd5 'Õ' */ 0x00, /* 00000000 */ 0x00, /* 00000000 */ 0x00, /* 00000000 */ @@ -3864,7 +3864,7 @@ 0x18, /* 00011000 */ 0x18, /* 00011000 */ - /* 214 0xd6 '�' */ + /* 214 0xd6 'Ö' */ 0x00, /* 00000000 */ 0x00, /* 00000000 */ 0x00, /* 00000000 */ @@ -3882,7 +3882,7 @@ 0x36, /* 00110110 */ 0x36, /* 00110110 */ - /* 215 0xd7 '�' */ + /* 215 0xd7 '×' */ 0x36, /* 00110110 */ 0x36, /* 00110110 */ 0x36, /* 00110110 */ @@ -3900,7 +3900,7 @@ 0x36, /* 00110110 */ 0x36, /* 00110110 */ - /* 216 0xd8 '�' */ + /* 216 0xd8 'Ø' */ 0x18, /* 00011000 */ 0x18, /* 00011000 */ 0x18, /* 00011000 */ @@ -3918,7 +3918,7 @@ 0x18, /* 00011000 */ 0x18, /* 00011000 */ - /* 217 0xd9 '�' */ + /* 217 0xd9 'Ù' */ 0x18, /* 00011000 */ 0x18, /* 00011000 */ 0x18, /* 00011000 */ @@ -3936,7 +3936,7 @@ 0x00, /* 00000000 */ 0x00, /* 00000000 */ - /* 218 0xda '�' */ + /* 218 0xda 'Ú' */ 0x00, /* 00000000 */ 0x00, /* 00000000 */ 0x00, /* 00000000 */ @@ -3954,7 +3954,7 @@ 0x18, /* 00011000 */ 0x18, /* 00011000 */ - /* 219 0xdb '�' */ + /* 219 0xdb 'Û' */ 0xff, /* 11111111 */ 0xff, /* 11111111 */ 0xff, /* 11111111 */ @@ -3972,7 +3972,7 @@ 0xff, /* 11111111 */ 0xff, /* 11111111 */ - /* 220 0xdc '�' */ + /* 220 0xdc 'Ü' */ 0x00, /* 00000000 */ 0x00, /* 00000000 */ 0x00, /* 00000000 */ @@ -3990,7 +3990,7 @@ 0xff, /* 11111111 */ 0xff, /* 11111111 */ - /* 221 0xdd '�' */ + /* 221 0xdd 'Ý' */ 0xf0, /* 11110000 */ 0xf0, /* 11110000 */ 0xf0, /* 11110000 */ @@ -4008,7 +4008,7 @@ 0xf0, /* 11110000 */ 0xf0, /* 11110000 */ - /* 222 0xde '�' */ + /* 222 0xde 'Þ' */ 0x0f, /* 00001111 */ 0x0f, /* 00001111 */ 0x0f, /* 00001111 */ @@ -4026,7 +4026,7 @@ 0x0f, /* 00001111 */ 0x0f, /* 00001111 */ - /* 223 0xdf '�' */ + /* 223 0xdf 'ß' */ 0xff, /* 11111111 */ 0xff, /* 11111111 */ 0xff, /* 11111111 */ @@ -4044,7 +4044,7 @@ 0x00, /* 00000000 */ 0x00, /* 00000000 */ - /* 224 0xe0 '�' */ + /* 224 0xe0 'à' */ 0x00, /* 00000000 */ 0x00, /* 00000000 */ 0x00, /* 00000000 */ @@ -4062,7 +4062,7 @@ 0x00, /* 00000000 */ 0x00, /* 00000000 */ - /* 225 0xe1 '�' */ + /* 225 0xe1 'á' */ 0x00, /* 00000000 */ 0x00, /* 00000000 */ 0x78, /* 01111000 */ @@ -4080,7 +4080,7 @@ 0x00, /* 00000000 */ 0x00, /* 00000000 */ - /* 226 0xe2 '�' */ + /* 226 0xe2 'â' */ 0x00, /* 00000000 */ 0x00, /* 00000000 */ 0xfe, /* 11111110 */ @@ -4098,7 +4098,7 @@ 0x00, /* 00000000 */ 0x00, /* 00000000 */ - /* 227 0xe3 '�' */ + /* 227 0xe3 'ã' */ 0x00, /* 00000000 */ 0x00, /* 00000000 */ 0x00, /* 00000000 */ @@ -4116,7 +4116,7 @@ 0x00, /* 00000000 */ 0x00, /* 00000000 */ - /* 228 0xe4 '�' */ + /* 228 0xe4 'ä' */ 0x00, /* 00000000 */ 0x00, /* 00000000 */ 0xfe, /* 11111110 */ @@ -4134,7 +4134,7 @@ 0x00, /* 00000000 */ 0x00, /* 00000000 */ - /* 229 0xe5 '�' */ + /* 229 0xe5 'å' */ 0x00, /* 00000000 */ 0x00, /* 00000000 */ 0x00, /* 00000000 */ @@ -4152,7 +4152,7 @@ 0x00, /* 00000000 */ 0x00, /* 00000000 */ - /* 230 0xe6 '�' */ + /* 230 0xe6 'æ' */ 0x00, /* 00000000 */ 0x00, /* 00000000 */ 0x00, /* 00000000 */ @@ -4170,7 +4170,7 @@ 0xc0, /* 11000000 */ 0x00, /* 00000000 */ - /* 231 0xe7 '�' */ + /* 231 0xe7 'ç' */ 0x00, /* 00000000 */ 0x00, /* 00000000 */ 0x00, /* 00000000 */ @@ -4188,7 +4188,7 @@ 0x00, /* 00000000 */ 0x00, /* 00000000 */ - /* 232 0xe8 '�' */ + /* 232 0xe8 'è' */ 0x00, /* 00000000 */ 0x00, /* 00000000 */ 0x7e, /* 01111110 */ @@ -4206,7 +4206,7 @@ 0x00, /* 00000000 */ 0x00, /* 00000000 */ - /* 233 0xe9 '�' */ + /* 233 0xe9 'é' */ 0x00, /* 00000000 */ 0x00, /* 00000000 */ 0x38, /* 00111000 */ @@ -4224,7 +4224,7 @@ 0x00, /* 00000000 */ 0x00, /* 00000000 */ - /* 234 0xea '�' */ + /* 234 0xea 'ê' */ 0x00, /* 00000000 */ 0x00, /* 00000000 */ 0x38, /* 00111000 */ @@ -4242,7 +4242,7 @@ 0x00, /* 00000000 */ 0x00, /* 00000000 */ - /* 235 0xeb '�' */ + /* 235 0xeb 'ë' */ 0x00, /* 00000000 */ 0x00, /* 00000000 */ 0x1e, /* 00011110 */ @@ -4260,7 +4260,7 @@ 0x00, /* 00000000 */ 0x00, /* 00000000 */ - /* 236 0xec '�' */ + /* 236 0xec 'ì' */ 0x00, /* 00000000 */ 0x00, /* 00000000 */ 0x00, /* 00000000 */ @@ -4278,7 +4278,7 @@ 0x00, /* 00000000 */ 0x00, /* 00000000 */ - /* 237 0xed '�' */ + /* 237 0xed 'í' */ 0x00, /* 00000000 */ 0x00, /* 00000000 */ 0x00, /* 00000000 */ @@ -4296,7 +4296,7 @@ 0x00, /* 00000000 */ 0x00, /* 00000000 */ - /* 238 0xee '�' */ + /* 238 0xee 'î' */ 0x00, /* 00000000 */ 0x00, /* 00000000 */ 0x1c, /* 00011100 */ @@ -4314,7 +4314,7 @@ 0x00, /* 00000000 */ 0x00, /* 00000000 */ - /* 239 0xef '�' */ + /* 239 0xef 'ï' */ 0x00, /* 00000000 */ 0x00, /* 00000000 */ 0x00, /* 00000000 */ @@ -4332,7 +4332,7 @@ 0x00, /* 00000000 */ 0x00, /* 00000000 */ - /* 240 0xf0 '�' */ + /* 240 0xf0 'ð' */ 0x00, /* 00000000 */ 0x00, /* 00000000 */ 0x00, /* 00000000 */ @@ -4350,7 +4350,7 @@ 0x00, /* 00000000 */ 0x00, /* 00000000 */ - /* 241 0xf1 '�' */ + /* 241 0xf1 'ñ' */ 0x00, /* 00000000 */ 0x00, /* 00000000 */ 0x00, /* 00000000 */ @@ -4368,7 +4368,7 @@ 0x00, /* 00000000 */ 0x00, /* 00000000 */ - /* 242 0xf2 '�' */ + /* 242 0xf2 'ò' */ 0x00, /* 00000000 */ 0x00, /* 00000000 */ 0x00, /* 00000000 */ @@ -4386,7 +4386,7 @@ 0x00, /* 00000000 */ 0x00, /* 00000000 */ - /* 243 0xf3 '�' */ + /* 243 0xf3 'ó' */ 0x00, /* 00000000 */ 0x00, /* 00000000 */ 0x00, /* 00000000 */ @@ -4404,7 +4404,7 @@ 0x00, /* 00000000 */ 0x00, /* 00000000 */ - /* 244 0xf4 '�' */ + /* 244 0xf4 'ô' */ 0x00, /* 00000000 */ 0x00, /* 00000000 */ 0x0e, /* 00001110 */ @@ -4422,7 +4422,7 @@ 0x18, /* 00011000 */ 0x18, /* 00011000 */ - /* 245 0xf5 '�' */ + /* 245 0xf5 'õ' */ 0x18, /* 00011000 */ 0x18, /* 00011000 */ 0x18, /* 00011000 */ @@ -4440,7 +4440,7 @@ 0x00, /* 00000000 */ 0x00, /* 00000000 */ - /* 246 0xf6 '�' */ + /* 246 0xf6 'ö' */ 0x00, /* 00000000 */ 0x00, /* 00000000 */ 0x00, /* 00000000 */ @@ -4458,7 +4458,7 @@ 0x00, /* 00000000 */ 0x00, /* 00000000 */ - /* 247 0xf7 '�' */ + /* 247 0xf7 '÷' */ 0x00, /* 00000000 */ 0x00, /* 00000000 */ 0x00, /* 00000000 */ @@ -4476,7 +4476,7 @@ 0x00, /* 00000000 */ 0x00, /* 00000000 */ - /* 248 0xf8 '�' */ + /* 248 0xf8 'ø' */ 0x00, /* 00000000 */ 0x38, /* 00111000 */ 0x6c, /* 01101100 */ @@ -4494,7 +4494,7 @@ 0x00, /* 00000000 */ 0x00, /* 00000000 */ - /* 249 0xf9 '�' */ + /* 249 0xf9 'ù' */ 0x00, /* 00000000 */ 0x00, /* 00000000 */ 0x00, /* 00000000 */ @@ -4512,7 +4512,7 @@ 0x00, /* 00000000 */ 0x00, /* 00000000 */ - /* 250 0xfa '�' */ + /* 250 0xfa 'ú' */ 0x00, /* 00000000 */ 0x00, /* 00000000 */ 0x00, /* 00000000 */ @@ -4530,7 +4530,7 @@ 0x00, /* 00000000 */ 0x00, /* 00000000 */ - /* 251 0xfb '�' */ + /* 251 0xfb 'û' */ 0x00, /* 00000000 */ 0x0f, /* 00001111 */ 0x0c, /* 00001100 */ @@ -4548,7 +4548,7 @@ 0x00, /* 00000000 */ 0x00, /* 00000000 */ - /* 252 0xfc '�' */ + /* 252 0xfc 'ü' */ 0x00, /* 00000000 */ 0x6c, /* 01101100 */ 0x36, /* 00110110 */ @@ -4566,7 +4566,7 @@ 0x00, /* 00000000 */ 0x00, /* 00000000 */ - /* 253 0xfd '�' */ + /* 253 0xfd 'ý' */ 0x00, /* 00000000 */ 0x3c, /* 00111100 */ 0x66, /* 01100110 */ @@ -4584,7 +4584,7 @@ 0x00, /* 00000000 */ 0x00, /* 00000000 */ - /* 254 0xfe '�' */ + /* 254 0xfe 'þ' */ 0x00, /* 00000000 */ 0x00, /* 00000000 */ 0x00, /* 00000000 */ @@ -4602,7 +4602,7 @@ 0x00, /* 00000000 */ 0x00, /* 00000000 */ - /* 255 0xff '�' */ + /* 255 0xff 'ÿ' */ 0x00, /* 00000000 */ 0x00, /* 00000000 */ 0x00, /* 00000000 */ diff --git a/lib/fonts/font_8x8.c b/lib/fonts/font_8x8.c index 24216a6..27d53de 100644 --- a/lib/fonts/font_8x8.c +++ b/lib/fonts/font_8x8.c @@ -1291,7 +1291,7 @@ 0xfe, /* 11111110 */ 0x00, /* 00000000 */ - /* 128 0x80 '�' */ + /* 128 0x80 '€' */ 0x7c, /* 01111100 */ 0xc6, /* 11000110 */ 0xc0, /* 11000000 */ @@ -1301,7 +1301,7 @@ 0x0c, /* 00001100 */ 0x78, /* 01111000 */ - /* 129 0x81 '�' */ + /* 129 0x81 '' */ 0xcc, /* 11001100 */ 0x00, /* 00000000 */ 0xcc, /* 11001100 */ @@ -1311,7 +1311,7 @@ 0x76, /* 01110110 */ 0x00, /* 00000000 */ - /* 130 0x82 '�' */ + /* 130 0x82 '‚' */ 0x0c, /* 00001100 */ 0x18, /* 00011000 */ 0x7c, /* 01111100 */ @@ -1321,7 +1321,7 @@ 0x7c, /* 01111100 */ 0x00, /* 00000000 */ - /* 131 0x83 '�' */ + /* 131 0x83 'ƒ' */ 0x7c, /* 01111100 */ 0x82, /* 10000010 */ 0x78, /* 01111000 */ @@ -1331,7 +1331,7 @@ 0x76, /* 01110110 */ 0x00, /* 00000000 */ - /* 132 0x84 '�' */ + /* 132 0x84 '„' */ 0xc6, /* 11000110 */ 0x00, /* 00000000 */ 0x78, /* 01111000 */ @@ -1341,7 +1341,7 @@ 0x76, /* 01110110 */ 0x00, /* 00000000 */ - /* 133 0x85 '�' */ + /* 133 0x85 '…' */ 0x30, /* 00110000 */ 0x18, /* 00011000 */ 0x78, /* 01111000 */ @@ -1351,7 +1351,7 @@ 0x76, /* 01110110 */ 0x00, /* 00000000 */ - /* 134 0x86 '�' */ + /* 134 0x86 '†' */ 0x30, /* 00110000 */ 0x30, /* 00110000 */ 0x78, /* 01111000 */ @@ -1361,7 +1361,7 @@ 0x76, /* 01110110 */ 0x00, /* 00000000 */ - /* 135 0x87 '�' */ + /* 135 0x87 '‡' */ 0x00, /* 00000000 */ 0x00, /* 00000000 */ 0x7e, /* 01111110 */ @@ -1371,7 +1371,7 @@ 0x0c, /* 00001100 */ 0x38, /* 00111000 */ - /* 136 0x88 '�' */ + /* 136 0x88 'ˆ' */ 0x7c, /* 01111100 */ 0x82, /* 10000010 */ 0x7c, /* 01111100 */ @@ -1381,7 +1381,7 @@ 0x7c, /* 01111100 */ 0x00, /* 00000000 */ - /* 137 0x89 '�' */ + /* 137 0x89 '‰' */ 0xc6, /* 11000110 */ 0x00, /* 00000000 */ 0x7c, /* 01111100 */ @@ -1391,7 +1391,7 @@ 0x7c, /* 01111100 */ 0x00, /* 00000000 */ - /* 138 0x8a '�' */ + /* 138 0x8a 'Š' */ 0x30, /* 00110000 */ 0x18, /* 00011000 */ 0x7c, /* 01111100 */ @@ -1401,7 +1401,7 @@ 0x7c, /* 01111100 */ 0x00, /* 00000000 */ - /* 139 0x8b '�' */ + /* 139 0x8b '‹' */ 0x66, /* 01100110 */ 0x00, /* 00000000 */ 0x38, /* 00111000 */ @@ -1411,7 +1411,7 @@ 0x3c, /* 00111100 */ 0x00, /* 00000000 */ - /* 140 0x8c '�' */ + /* 140 0x8c 'Œ' */ 0x7c, /* 01111100 */ 0x82, /* 10000010 */ 0x38, /* 00111000 */ @@ -1421,7 +1421,7 @@ 0x3c, /* 00111100 */ 0x00, /* 00000000 */ - /* 141 0x8d '�' */ + /* 141 0x8d '' */ 0x30, /* 00110000 */ 0x18, /* 00011000 */ 0x00, /* 00000000 */ @@ -1431,7 +1431,7 @@ 0x3c, /* 00111100 */ 0x00, /* 00000000 */ - /* 142 0x8e '�' */ + /* 142 0x8e 'Ž' */ 0xc6, /* 11000110 */ 0x38, /* 00111000 */ 0x6c, /* 01101100 */ @@ -1441,7 +1441,7 @@ 0xc6, /* 11000110 */ 0x00, /* 00000000 */ - /* 143 0x8f '�' */ + /* 143 0x8f '' */ 0x38, /* 00111000 */ 0x6c, /* 01101100 */ 0x7c, /* 01111100 */ @@ -1451,7 +1451,7 @@ 0xc6, /* 11000110 */ 0x00, /* 00000000 */ - /* 144 0x90 '�' */ + /* 144 0x90 '' */ 0x18, /* 00011000 */ 0x30, /* 00110000 */ 0xfe, /* 11111110 */ @@ -1461,7 +1461,7 @@ 0xfe, /* 11111110 */ 0x00, /* 00000000 */ - /* 145 0x91 '�' */ + /* 145 0x91 '‘' */ 0x00, /* 00000000 */ 0x00, /* 00000000 */ 0x7e, /* 01111110 */ @@ -1471,7 +1471,7 @@ 0x7e, /* 01111110 */ 0x00, /* 00000000 */ - /* 146 0x92 '�' */ + /* 146 0x92 '’' */ 0x3e, /* 00111110 */ 0x6c, /* 01101100 */ 0xcc, /* 11001100 */ @@ -1481,7 +1481,7 @@ 0xce, /* 11001110 */ 0x00, /* 00000000 */ - /* 147 0x93 '�' */ + /* 147 0x93 '“' */ 0x7c, /* 01111100 */ 0x82, /* 10000010 */ 0x7c, /* 01111100 */ @@ -1491,7 +1491,7 @@ 0x7c, /* 01111100 */ 0x00, /* 00000000 */ - /* 148 0x94 '�' */ + /* 148 0x94 '”' */ 0xc6, /* 11000110 */ 0x00, /* 00000000 */ 0x7c, /* 01111100 */ @@ -1501,7 +1501,7 @@ 0x7c, /* 01111100 */ 0x00, /* 00000000 */ - /* 149 0x95 '�' */ + /* 149 0x95 '•' */ 0x30, /* 00110000 */ 0x18, /* 00011000 */ 0x7c, /* 01111100 */ @@ -1511,7 +1511,7 @@ 0x7c, /* 01111100 */ 0x00, /* 00000000 */ - /* 150 0x96 '�' */ + /* 150 0x96 '–' */ 0x78, /* 01111000 */ 0x84, /* 10000100 */ 0x00, /* 00000000 */ @@ -1521,7 +1521,7 @@ 0x76, /* 01110110 */ 0x00, /* 00000000 */ - /* 151 0x97 '�' */ + /* 151 0x97 '—' */ 0x60, /* 01100000 */ 0x30, /* 00110000 */ 0xcc, /* 11001100 */ @@ -1531,7 +1531,7 @@ 0x76, /* 01110110 */ 0x00, /* 00000000 */ - /* 152 0x98 '�' */ + /* 152 0x98 '˜' */ 0xc6, /* 11000110 */ 0x00, /* 00000000 */ 0xc6, /* 11000110 */ @@ -1541,7 +1541,7 @@ 0x06, /* 00000110 */ 0xfc, /* 11111100 */ - /* 153 0x99 '�' */ + /* 153 0x99 '™' */ 0xc6, /* 11000110 */ 0x38, /* 00111000 */ 0x6c, /* 01101100 */ @@ -1551,7 +1551,7 @@ 0x38, /* 00111000 */ 0x00, /* 00000000 */ - /* 154 0x9a '�' */ + /* 154 0x9a 'š' */ 0xc6, /* 11000110 */ 0x00, /* 00000000 */ 0xc6, /* 11000110 */ @@ -1561,7 +1561,7 @@ 0x7c, /* 01111100 */ 0x00, /* 00000000 */ - /* 155 0x9b '�' */ + /* 155 0x9b '›' */ 0x18, /* 00011000 */ 0x18, /* 00011000 */ 0x7e, /* 01111110 */ @@ -1571,7 +1571,7 @@ 0x18, /* 00011000 */ 0x18, /* 00011000 */ - /* 156 0x9c '�' */ + /* 156 0x9c 'œ' */ 0x38, /* 00111000 */ 0x6c, /* 01101100 */ 0x64, /* 01100100 */ @@ -1581,7 +1581,7 @@ 0xfc, /* 11111100 */ 0x00, /* 00000000 */ - /* 157 0x9d '�' */ + /* 157 0x9d '' */ 0x66, /* 01100110 */ 0x66, /* 01100110 */ 0x3c, /* 00111100 */ @@ -1591,7 +1591,7 @@ 0x18, /* 00011000 */ 0x18, /* 00011000 */ - /* 158 0x9e '�' */ + /* 158 0x9e 'ž' */ 0xf8, /* 11111000 */ 0xcc, /* 11001100 */ 0xcc, /* 11001100 */ @@ -1601,7 +1601,7 @@ 0xc6, /* 11000110 */ 0xc7, /* 11000111 */ - /* 159 0x9f '�' */ + /* 159 0x9f 'Ÿ' */ 0x0e, /* 00001110 */ 0x1b, /* 00011011 */ 0x18, /* 00011000 */ @@ -1611,7 +1611,7 @@ 0x70, /* 01110000 */ 0x00, /* 00000000 */ - /* 160 0xa0 '�' */ + /* 160 0xa0 ' ' */ 0x18, /* 00011000 */ 0x30, /* 00110000 */ 0x78, /* 01111000 */ @@ -1621,7 +1621,7 @@ 0x76, /* 01110110 */ 0x00, /* 00000000 */ - /* 161 0xa1 '�' */ + /* 161 0xa1 '¡' */ 0x0c, /* 00001100 */ 0x18, /* 00011000 */ 0x00, /* 00000000 */ @@ -1631,7 +1631,7 @@ 0x3c, /* 00111100 */ 0x00, /* 00000000 */ - /* 162 0xa2 '�' */ + /* 162 0xa2 '¢' */ 0x0c, /* 00001100 */ 0x18, /* 00011000 */ 0x7c, /* 01111100 */ @@ -1641,7 +1641,7 @@ 0x7c, /* 01111100 */ 0x00, /* 00000000 */ - /* 163 0xa3 '�' */ + /* 163 0xa3 '£' */ 0x18, /* 00011000 */ 0x30, /* 00110000 */ 0xcc, /* 11001100 */ @@ -1651,7 +1651,7 @@ 0x76, /* 01110110 */ 0x00, /* 00000000 */ - /* 164 0xa4 '�' */ + /* 164 0xa4 '¤' */ 0x76, /* 01110110 */ 0xdc, /* 11011100 */ 0x00, /* 00000000 */ @@ -1661,7 +1661,7 @@ 0x66, /* 01100110 */ 0x00, /* 00000000 */ - /* 165 0xa5 '�' */ + /* 165 0xa5 '¥' */ 0x76, /* 01110110 */ 0xdc, /* 11011100 */ 0x00, /* 00000000 */ @@ -1671,7 +1671,7 @@ 0xce, /* 11001110 */ 0x00, /* 00000000 */ - /* 166 0xa6 '�' */ + /* 166 0xa6 '¦' */ 0x3c, /* 00111100 */ 0x6c, /* 01101100 */ 0x6c, /* 01101100 */ @@ -1681,7 +1681,7 @@ 0x00, /* 00000000 */ 0x00, /* 00000000 */ - /* 167 0xa7 '�' */ + /* 167 0xa7 '§' */ 0x38, /* 00111000 */ 0x6c, /* 01101100 */ 0x6c, /* 01101100 */ @@ -1691,7 +1691,7 @@ 0x00, /* 00000000 */ 0x00, /* 00000000 */ - /* 168 0xa8 '�' */ + /* 168 0xa8 '¨' */ 0x18, /* 00011000 */ 0x00, /* 00000000 */ 0x18, /* 00011000 */ @@ -1701,7 +1701,7 @@ 0x3e, /* 00111110 */ 0x00, /* 00000000 */ - /* 169 0xa9 '�' */ + /* 169 0xa9 '©' */ 0x00, /* 00000000 */ 0x00, /* 00000000 */ 0x00, /* 00000000 */ @@ -1711,7 +1711,7 @@ 0x00, /* 00000000 */ 0x00, /* 00000000 */ - /* 170 0xaa '�' */ + /* 170 0xaa 'ª' */ 0x00, /* 00000000 */ 0x00, /* 00000000 */ 0x00, /* 00000000 */ @@ -1721,7 +1721,7 @@ 0x00, /* 00000000 */ 0x00, /* 00000000 */ - /* 171 0xab '�' */ + /* 171 0xab '«' */ 0x63, /* 01100011 */ 0xe6, /* 11100110 */ 0x6c, /* 01101100 */ @@ -1731,7 +1731,7 @@ 0xcc, /* 11001100 */ 0x0f, /* 00001111 */ - /* 172 0xac '�' */ + /* 172 0xac '¬' */ 0x63, /* 01100011 */ 0xe6, /* 11100110 */ 0x6c, /* 01101100 */ @@ -1741,7 +1741,7 @@ 0xdf, /* 11011111 */ 0x06, /* 00000110 */ - /* 173 0xad '�' */ + /* 173 0xad '­' */ 0x18, /* 00011000 */ 0x00, /* 00000000 */ 0x18, /* 00011000 */ @@ -1751,7 +1751,7 @@ 0x18, /* 00011000 */ 0x00, /* 00000000 */ - /* 174 0xae '�' */ + /* 174 0xae '®' */ 0x00, /* 00000000 */ 0x33, /* 00110011 */ 0x66, /* 01100110 */ @@ -1761,7 +1761,7 @@ 0x00, /* 00000000 */ 0x00, /* 00000000 */ - /* 175 0xaf '�' */ + /* 175 0xaf '¯' */ 0x00, /* 00000000 */ 0xcc, /* 11001100 */ 0x66, /* 01100110 */ @@ -1771,7 +1771,7 @@ 0x00, /* 00000000 */ 0x00, /* 00000000 */ - /* 176 0xb0 '�' */ + /* 176 0xb0 '°' */ 0x22, /* 00100010 */ 0x88, /* 10001000 */ 0x22, /* 00100010 */ @@ -1781,7 +1781,7 @@ 0x22, /* 00100010 */ 0x88, /* 10001000 */ - /* 177 0xb1 '�' */ + /* 177 0xb1 '±' */ 0x55, /* 01010101 */ 0xaa, /* 10101010 */ 0x55, /* 01010101 */ @@ -1791,7 +1791,7 @@ 0x55, /* 01010101 */ 0xaa, /* 10101010 */ - /* 178 0xb2 '�' */ + /* 178 0xb2 '²' */ 0x77, /* 01110111 */ 0xdd, /* 11011101 */ 0x77, /* 01110111 */ @@ -1801,7 +1801,7 @@ 0x77, /* 01110111 */ 0xdd, /* 11011101 */ - /* 179 0xb3 '�' */ + /* 179 0xb3 '³' */ 0x18, /* 00011000 */ 0x18, /* 00011000 */ 0x18, /* 00011000 */ @@ -1811,7 +1811,7 @@ 0x18, /* 00011000 */ 0x18, /* 00011000 */ - /* 180 0xb4 '�' */ + /* 180 0xb4 '´' */ 0x18, /* 00011000 */ 0x18, /* 00011000 */ 0x18, /* 00011000 */ @@ -1821,7 +1821,7 @@ 0x18, /* 00011000 */ 0x18, /* 00011000 */ - /* 181 0xb5 '�' */ + /* 181 0xb5 'µ' */ 0x18, /* 00011000 */ 0x18, /* 00011000 */ 0xf8, /* 11111000 */ @@ -1831,7 +1831,7 @@ 0x18, /* 00011000 */ 0x18, /* 00011000 */ - /* 182 0xb6 '�' */ + /* 182 0xb6 '¶' */ 0x36, /* 00110110 */ 0x36, /* 00110110 */ 0x36, /* 00110110 */ @@ -1841,7 +1841,7 @@ 0x36, /* 00110110 */ 0x36, /* 00110110 */ - /* 183 0xb7 '�' */ + /* 183 0xb7 '·' */ 0x00, /* 00000000 */ 0x00, /* 00000000 */ 0x00, /* 00000000 */ @@ -1851,7 +1851,7 @@ 0x36, /* 00110110 */ 0x36, /* 00110110 */ - /* 184 0xb8 '�' */ + /* 184 0xb8 '¸' */ 0x00, /* 00000000 */ 0x00, /* 00000000 */ 0xf8, /* 11111000 */ @@ -1861,7 +1861,7 @@ 0x18, /* 00011000 */ 0x18, /* 00011000 */ - /* 185 0xb9 '�' */ + /* 185 0xb9 '¹' */ 0x36, /* 00110110 */ 0x36, /* 00110110 */ 0xf6, /* 11110110 */ @@ -1871,7 +1871,7 @@ 0x36, /* 00110110 */ 0x36, /* 00110110 */ - /* 186 0xba '�' */ + /* 186 0xba 'º' */ 0x36, /* 00110110 */ 0x36, /* 00110110 */ 0x36, /* 00110110 */ @@ -1881,7 +1881,7 @@ 0x36, /* 00110110 */ 0x36, /* 00110110 */ - /* 187 0xbb '�' */ + /* 187 0xbb '»' */ 0x00, /* 00000000 */ 0x00, /* 00000000 */ 0xfe, /* 11111110 */ @@ -1891,7 +1891,7 @@ 0x36, /* 00110110 */ 0x36, /* 00110110 */ - /* 188 0xbc '�' */ + /* 188 0xbc '¼' */ 0x36, /* 00110110 */ 0x36, /* 00110110 */ 0xf6, /* 11110110 */ @@ -1901,7 +1901,7 @@ 0x00, /* 00000000 */ 0x00, /* 00000000 */ - /* 189 0xbd '�' */ + /* 189 0xbd '½' */ 0x36, /* 00110110 */ 0x36, /* 00110110 */ 0x36, /* 00110110 */ @@ -1911,7 +1911,7 @@ 0x00, /* 00000000 */ 0x00, /* 00000000 */ - /* 190 0xbe '�' */ + /* 190 0xbe '¾' */ 0x18, /* 00011000 */ 0x18, /* 00011000 */ 0xf8, /* 11111000 */ @@ -1921,7 +1921,7 @@ 0x00, /* 00000000 */ 0x00, /* 00000000 */ - /* 191 0xbf '�' */ + /* 191 0xbf '¿' */ 0x00, /* 00000000 */ 0x00, /* 00000000 */ 0x00, /* 00000000 */ @@ -1931,7 +1931,7 @@ 0x18, /* 00011000 */ 0x18, /* 00011000 */ - /* 192 0xc0 '�' */ + /* 192 0xc0 'À' */ 0x18, /* 00011000 */ 0x18, /* 00011000 */ 0x18, /* 00011000 */ @@ -1941,7 +1941,7 @@ 0x00, /* 00000000 */ 0x00, /* 00000000 */ - /* 193 0xc1 '�' */ + /* 193 0xc1 'Á' */ 0x18, /* 00011000 */ 0x18, /* 00011000 */ 0x18, /* 00011000 */ @@ -1951,7 +1951,7 @@ 0x00, /* 00000000 */ 0x00, /* 00000000 */ - /* 194 0xc2 '�' */ + /* 194 0xc2 'Â' */ 0x00, /* 00000000 */ 0x00, /* 00000000 */ 0x00, /* 00000000 */ @@ -1961,7 +1961,7 @@ 0x18, /* 00011000 */ 0x18, /* 00011000 */ - /* 195 0xc3 '�' */ + /* 195 0xc3 'Ã' */ 0x18, /* 00011000 */ 0x18, /* 00011000 */ 0x18, /* 00011000 */ @@ -1971,7 +1971,7 @@ 0x18, /* 00011000 */ 0x18, /* 00011000 */ - /* 196 0xc4 '�' */ + /* 196 0xc4 'Ä' */ 0x00, /* 00000000 */ 0x00, /* 00000000 */ 0x00, /* 00000000 */ @@ -1981,7 +1981,7 @@ 0x00, /* 00000000 */ 0x00, /* 00000000 */ - /* 197 0xc5 '�' */ + /* 197 0xc5 'Å' */ 0x18, /* 00011000 */ 0x18, /* 00011000 */ 0x18, /* 00011000 */ @@ -1991,7 +1991,7 @@ 0x18, /* 00011000 */ 0x18, /* 00011000 */ - /* 198 0xc6 '�' */ + /* 198 0xc6 'Æ' */ 0x18, /* 00011000 */ 0x18, /* 00011000 */ 0x1f, /* 00011111 */ @@ -2001,7 +2001,7 @@ 0x18, /* 00011000 */ 0x18, /* 00011000 */ - /* 199 0xc7 '�' */ + /* 199 0xc7 'Ç' */ 0x36, /* 00110110 */ 0x36, /* 00110110 */ 0x36, /* 00110110 */ @@ -2011,7 +2011,7 @@ 0x36, /* 00110110 */ 0x36, /* 00110110 */ - /* 200 0xc8 '�' */ + /* 200 0xc8 'È' */ 0x36, /* 00110110 */ 0x36, /* 00110110 */ 0x37, /* 00110111 */ @@ -2021,7 +2021,7 @@ 0x00, /* 00000000 */ 0x00, /* 00000000 */ - /* 201 0xc9 '�' */ + /* 201 0xc9 'É' */ 0x00, /* 00000000 */ 0x00, /* 00000000 */ 0x3f, /* 00111111 */ @@ -2031,7 +2031,7 @@ 0x36, /* 00110110 */ 0x36, /* 00110110 */ - /* 202 0xca '�' */ + /* 202 0xca 'Ê' */ 0x36, /* 00110110 */ 0x36, /* 00110110 */ 0xf7, /* 11110111 */ @@ -2041,7 +2041,7 @@ 0x00, /* 00000000 */ 0x00, /* 00000000 */ - /* 203 0xcb '�' */ + /* 203 0xcb 'Ë' */ 0x00, /* 00000000 */ 0x00, /* 00000000 */ 0xff, /* 11111111 */ @@ -2051,7 +2051,7 @@ 0x36, /* 00110110 */ 0x36, /* 00110110 */ - /* 204 0xcc '�' */ + /* 204 0xcc 'Ì' */ 0x36, /* 00110110 */ 0x36, /* 00110110 */ 0x37, /* 00110111 */ @@ -2061,7 +2061,7 @@ 0x36, /* 00110110 */ 0x36, /* 00110110 */ - /* 205 0xcd '�' */ + /* 205 0xcd 'Í' */ 0x00, /* 00000000 */ 0x00, /* 00000000 */ 0xff, /* 11111111 */ @@ -2071,7 +2071,7 @@ 0x00, /* 00000000 */ 0x00, /* 00000000 */ - /* 206 0xce '�' */ + /* 206 0xce 'Î' */ 0x36, /* 00110110 */ 0x36, /* 00110110 */ 0xf7, /* 11110111 */ @@ -2081,7 +2081,7 @@ 0x36, /* 00110110 */ 0x36, /* 00110110 */ - /* 207 0xcf '�' */ + /* 207 0xcf 'Ï' */ 0x18, /* 00011000 */ 0x18, /* 00011000 */ 0xff, /* 11111111 */ @@ -2091,7 +2091,7 @@ 0x00, /* 00000000 */ 0x00, /* 00000000 */ - /* 208 0xd0 '�' */ + /* 208 0xd0 'Ð' */ 0x36, /* 00110110 */ 0x36, /* 00110110 */ 0x36, /* 00110110 */ @@ -2101,7 +2101,7 @@ 0x00, /* 00000000 */ 0x00, /* 00000000 */ - /* 209 0xd1 '�' */ + /* 209 0xd1 'Ñ' */ 0x00, /* 00000000 */ 0x00, /* 00000000 */ 0xff, /* 11111111 */ @@ -2111,7 +2111,7 @@ 0x18, /* 00011000 */ 0x18, /* 00011000 */ - /* 210 0xd2 '�' */ + /* 210 0xd2 'Ò' */ 0x00, /* 00000000 */ 0x00, /* 00000000 */ 0x00, /* 00000000 */ @@ -2121,7 +2121,7 @@ 0x36, /* 00110110 */ 0x36, /* 00110110 */ - /* 211 0xd3 '�' */ + /* 211 0xd3 'Ó' */ 0x36, /* 00110110 */ 0x36, /* 00110110 */ 0x36, /* 00110110 */ @@ -2131,7 +2131,7 @@ 0x00, /* 00000000 */ 0x00, /* 00000000 */ - /* 212 0xd4 '�' */ + /* 212 0xd4 'Ô' */ 0x18, /* 00011000 */ 0x18, /* 00011000 */ 0x1f, /* 00011111 */ @@ -2141,7 +2141,7 @@ 0x00, /* 00000000 */ 0x00, /* 00000000 */ - /* 213 0xd5 '�' */ + /* 213 0xd5 'Õ' */ 0x00, /* 00000000 */ 0x00, /* 00000000 */ 0x1f, /* 00011111 */ @@ -2151,7 +2151,7 @@ 0x18, /* 00011000 */ 0x18, /* 00011000 */ - /* 214 0xd6 '�' */ + /* 214 0xd6 'Ö' */ 0x00, /* 00000000 */ 0x00, /* 00000000 */ 0x00, /* 00000000 */ @@ -2161,7 +2161,7 @@ 0x36, /* 00110110 */ 0x36, /* 00110110 */ - /* 215 0xd7 '�' */ + /* 215 0xd7 '×' */ 0x36, /* 00110110 */ 0x36, /* 00110110 */ 0x36, /* 00110110 */ @@ -2171,7 +2171,7 @@ 0x36, /* 00110110 */ 0x36, /* 00110110 */ - /* 216 0xd8 '�' */ + /* 216 0xd8 'Ø' */ 0x18, /* 00011000 */ 0x18, /* 00011000 */ 0xff, /* 11111111 */ @@ -2181,7 +2181,7 @@ 0x18, /* 00011000 */ 0x18, /* 00011000 */ - /* 217 0xd9 '�' */ + /* 217 0xd9 'Ù' */ 0x18, /* 00011000 */ 0x18, /* 00011000 */ 0x18, /* 00011000 */ @@ -2191,7 +2191,7 @@ 0x00, /* 00000000 */ 0x00, /* 00000000 */ - /* 218 0xda '�' */ + /* 218 0xda 'Ú' */ 0x00, /* 00000000 */ 0x00, /* 00000000 */ 0x00, /* 00000000 */ @@ -2201,7 +2201,7 @@ 0x18, /* 00011000 */ 0x18, /* 00011000 */ - /* 219 0xdb '�' */ + /* 219 0xdb 'Û' */ 0xff, /* 11111111 */ 0xff, /* 11111111 */ 0xff, /* 11111111 */ @@ -2211,7 +2211,7 @@ 0xff, /* 11111111 */ 0xff, /* 11111111 */ - /* 220 0xdc '�' */ + /* 220 0xdc 'Ü' */ 0x00, /* 00000000 */ 0x00, /* 00000000 */ 0x00, /* 00000000 */ @@ -2221,7 +2221,7 @@ 0xff, /* 11111111 */ 0xff, /* 11111111 */ - /* 221 0xdd '�' */ + /* 221 0xdd 'Ý' */ 0xf0, /* 11110000 */ 0xf0, /* 11110000 */ 0xf0, /* 11110000 */ @@ -2231,7 +2231,7 @@ 0xf0, /* 11110000 */ 0xf0, /* 11110000 */ - /* 222 0xde '�' */ + /* 222 0xde 'Þ' */ 0x0f, /* 00001111 */ 0x0f, /* 00001111 */ 0x0f, /* 00001111 */ @@ -2241,7 +2241,7 @@ 0x0f, /* 00001111 */ 0x0f, /* 00001111 */ - /* 223 0xdf '�' */ + /* 223 0xdf 'ß' */ 0xff, /* 11111111 */ 0xff, /* 11111111 */ 0xff, /* 11111111 */ @@ -2251,7 +2251,7 @@ 0x00, /* 00000000 */ 0x00, /* 00000000 */ - /* 224 0xe0 '�' */ + /* 224 0xe0 'à' */ 0x00, /* 00000000 */ 0x00, /* 00000000 */ 0x76, /* 01110110 */ @@ -2261,7 +2261,7 @@ 0x76, /* 01110110 */ 0x00, /* 00000000 */ - /* 225 0xe1 '�' */ + /* 225 0xe1 'á' */ 0x78, /* 01111000 */ 0xcc, /* 11001100 */ 0xcc, /* 11001100 */ @@ -2271,7 +2271,7 @@ 0xcc, /* 11001100 */ 0x00, /* 00000000 */ - /* 226 0xe2 '�' */ + /* 226 0xe2 'â' */ 0xfe, /* 11111110 */ 0xc6, /* 11000110 */ 0xc0, /* 11000000 */ @@ -2281,7 +2281,7 @@ 0xc0, /* 11000000 */ 0x00, /* 00000000 */ - /* 227 0xe3 '�' */ + /* 227 0xe3 'ã' */ 0x00, /* 00000000 */ 0x00, /* 00000000 */ 0xfe, /* 11111110 */ @@ -2291,7 +2291,7 @@ 0x6c, /* 01101100 */ 0x00, /* 00000000 */ - /* 228 0xe4 '�' */ + /* 228 0xe4 'ä' */ 0xfe, /* 11111110 */ 0xc6, /* 11000110 */ 0x60, /* 01100000 */ @@ -2301,7 +2301,7 @@ 0xfe, /* 11111110 */ 0x00, /* 00000000 */ - /* 229 0xe5 '�' */ + /* 229 0xe5 'å' */ 0x00, /* 00000000 */ 0x00, /* 00000000 */ 0x7e, /* 01111110 */ @@ -2311,7 +2311,7 @@ 0x70, /* 01110000 */ 0x00, /* 00000000 */ - /* 230 0xe6 '�' */ + /* 230 0xe6 'æ' */ 0x00, /* 00000000 */ 0x00, /* 00000000 */ 0x66, /* 01100110 */ @@ -2321,7 +2321,7 @@ 0x7c, /* 01111100 */ 0xc0, /* 11000000 */ - /* 231 0xe7 '�' */ + /* 231 0xe7 'ç' */ 0x00, /* 00000000 */ 0x76, /* 01110110 */ 0xdc, /* 11011100 */ @@ -2331,7 +2331,7 @@ 0x18, /* 00011000 */ 0x00, /* 00000000 */ - /* 232 0xe8 '�' */ + /* 232 0xe8 'è' */ 0x7e, /* 01111110 */ 0x18, /* 00011000 */ 0x3c, /* 00111100 */ @@ -2341,7 +2341,7 @@ 0x18, /* 00011000 */ 0x7e, /* 01111110 */ - /* 233 0xe9 '�' */ + /* 233 0xe9 'é' */ 0x38, /* 00111000 */ 0x6c, /* 01101100 */ 0xc6, /* 11000110 */ @@ -2351,7 +2351,7 @@ 0x38, /* 00111000 */ 0x00, /* 00000000 */ - /* 234 0xea '�' */ + /* 234 0xea 'ê' */ 0x38, /* 00111000 */ 0x6c, /* 01101100 */ 0xc6, /* 11000110 */ @@ -2361,7 +2361,7 @@ 0xee, /* 11101110 */ 0x00, /* 00000000 */ - /* 235 0xeb '�' */ + /* 235 0xeb 'ë' */ 0x0e, /* 00001110 */ 0x18, /* 00011000 */ 0x0c, /* 00001100 */ @@ -2371,7 +2371,7 @@ 0x3c, /* 00111100 */ 0x00, /* 00000000 */ - /* 236 0xec '�' */ + /* 236 0xec 'ì' */ 0x00, /* 00000000 */ 0x00, /* 00000000 */ 0x7e, /* 01111110 */ @@ -2381,7 +2381,7 @@ 0x00, /* 00000000 */ 0x00, /* 00000000 */ - /* 237 0xed '�' */ + /* 237 0xed 'í' */ 0x06, /* 00000110 */ 0x0c, /* 00001100 */ 0x7e, /* 01111110 */ @@ -2391,7 +2391,7 @@ 0x60, /* 01100000 */ 0xc0, /* 11000000 */ - /* 238 0xee '�' */ + /* 238 0xee 'î' */ 0x1e, /* 00011110 */ 0x30, /* 00110000 */ 0x60, /* 01100000 */ @@ -2401,7 +2401,7 @@ 0x1e, /* 00011110 */ 0x00, /* 00000000 */ - /* 239 0xef '�' */ + /* 239 0xef 'ï' */ 0x00, /* 00000000 */ 0x7c, /* 01111100 */ 0xc6, /* 11000110 */ @@ -2411,7 +2411,7 @@ 0xc6, /* 11000110 */ 0x00, /* 00000000 */ - /* 240 0xf0 '�' */ + /* 240 0xf0 'ð' */ 0x00, /* 00000000 */ 0xfe, /* 11111110 */ 0x00, /* 00000000 */ @@ -2421,7 +2421,7 @@ 0x00, /* 00000000 */ 0x00, /* 00000000 */ - /* 241 0xf1 '�' */ + /* 241 0xf1 'ñ' */ 0x18, /* 00011000 */ 0x18, /* 00011000 */ 0x7e, /* 01111110 */ @@ -2431,7 +2431,7 @@ 0x7e, /* 01111110 */ 0x00, /* 00000000 */ - /* 242 0xf2 '�' */ + /* 242 0xf2 'ò' */ 0x30, /* 00110000 */ 0x18, /* 00011000 */ 0x0c, /* 00001100 */ @@ -2441,7 +2441,7 @@ 0x7e, /* 01111110 */ 0x00, /* 00000000 */ - /* 243 0xf3 '�' */ + /* 243 0xf3 'ó' */ 0x0c, /* 00001100 */ 0x18, /* 00011000 */ 0x30, /* 00110000 */ @@ -2451,7 +2451,7 @@ 0x7e, /* 01111110 */ 0x00, /* 00000000 */ - /* 244 0xf4 '�' */ + /* 244 0xf4 'ô' */ 0x0e, /* 00001110 */ 0x1b, /* 00011011 */ 0x1b, /* 00011011 */ @@ -2461,7 +2461,7 @@ 0x18, /* 00011000 */ 0x18, /* 00011000 */ - /* 245 0xf5 '�' */ + /* 245 0xf5 'õ' */ 0x18, /* 00011000 */ 0x18, /* 00011000 */ 0x18, /* 00011000 */ @@ -2471,7 +2471,7 @@ 0xd8, /* 11011000 */ 0x70, /* 01110000 */ - /* 246 0xf6 '�' */ + /* 246 0xf6 'ö' */ 0x00, /* 00000000 */ 0x18, /* 00011000 */ 0x00, /* 00000000 */ @@ -2481,7 +2481,7 @@ 0x00, /* 00000000 */ 0x00, /* 00000000 */ - /* 247 0xf7 '�' */ + /* 247 0xf7 '÷' */ 0x00, /* 00000000 */ 0x76, /* 01110110 */ 0xdc, /* 11011100 */ @@ -2491,7 +2491,7 @@ 0x00, /* 00000000 */ 0x00, /* 00000000 */ - /* 248 0xf8 '�' */ + /* 248 0xf8 'ø' */ 0x38, /* 00111000 */ 0x6c, /* 01101100 */ 0x6c, /* 01101100 */ @@ -2501,7 +2501,7 @@ 0x00, /* 00000000 */ 0x00, /* 00000000 */ - /* 249 0xf9 '�' */ + /* 249 0xf9 'ù' */ 0x00, /* 00000000 */ 0x00, /* 00000000 */ 0x00, /* 00000000 */ @@ -2511,7 +2511,7 @@ 0x00, /* 00000000 */ 0x00, /* 00000000 */ - /* 250 0xfa '�' */ + /* 250 0xfa 'ú' */ 0x00, /* 00000000 */ 0x00, /* 00000000 */ 0x00, /* 00000000 */ @@ -2521,7 +2521,7 @@ 0x00, /* 00000000 */ 0x00, /* 00000000 */ - /* 251 0xfb '�' */ + /* 251 0xfb 'û' */ 0x0f, /* 00001111 */ 0x0c, /* 00001100 */ 0x0c, /* 00001100 */ @@ -2531,7 +2531,7 @@ 0x3c, /* 00111100 */ 0x1c, /* 00011100 */ - /* 252 0xfc '�' */ + /* 252 0xfc 'ü' */ 0x6c, /* 01101100 */ 0x36, /* 00110110 */ 0x36, /* 00110110 */ @@ -2541,7 +2541,7 @@ 0x00, /* 00000000 */ 0x00, /* 00000000 */ - /* 253 0xfd '�' */ + /* 253 0xfd 'ý' */ 0x78, /* 01111000 */ 0x0c, /* 00001100 */ 0x18, /* 00011000 */ @@ -2551,7 +2551,7 @@ 0x00, /* 00000000 */ 0x00, /* 00000000 */ - /* 254 0xfe '�' */ + /* 254 0xfe 'þ' */ 0x00, /* 00000000 */ 0x00, /* 00000000 */ 0x3c, /* 00111100 */ @@ -2561,7 +2561,7 @@ 0x00, /* 00000000 */ 0x00, /* 00000000 */ - /* 255 0xff '�' */ + /* 255 0xff 'ÿ' */ 0x00, /* 00000000 */ 0x00, /* 00000000 */ 0x00, /* 00000000 */ diff --git a/lib/gui/lodepng.c b/lib/gui/lodepng.c index 78a34db..82fa90a 100644 --- a/lib/gui/lodepng.c +++ b/lib/gui/lodepng.c @@ -822,7 +822,7 @@ if(!error) { - /*calculate the lenghts of each symbol, as the amount of times a coin of each symbol is used*/ + /*calculate the lengths of each symbol, as the amount of times a coin of each symbol is used*/ for(i = 0; i < numpresent - 1; i++) { Coin* coin = &coins[i]; @@ -1678,7 +1678,7 @@ another huffman tree is used for the dist values ("d"). These two trees are stored using their code lengths, and to compress even more these code lengths are also run-length encoded and huffman compressed. This gives a huffman tree - of code lengths "cl". The code lenghts used to describe this third tree are + of code lengths "cl". The code lengths used to describe this third tree are the code length code lengths ("clcl"). */ @@ -1690,7 +1690,7 @@ uivector frequencies_ll; /*frequency of lit,len codes*/ uivector frequencies_d; /*frequency of dist codes*/ uivector frequencies_cl; /*frequency of code length codes*/ - uivector bitlen_lld; /*lit,len,dist code lenghts (int bits), literally (without repeat codes).*/ + uivector bitlen_lld; /*lit,len,dist code lengths (int bits), literally (without repeat codes).*/ uivector bitlen_lld_e; /*bitlen_lld encoded with repeat codes (this is a rudemtary run length compression)*/ /*bitlen_cl is the code length code lengths ("clcl"). The bit lengths of codes to represent tree_cl (these are written as is in the file, it would be crazy to compress these using yet another huffman @@ -1828,7 +1828,7 @@ if(!uivector_resize(&bitlen_cl, NUM_CODE_LENGTH_CODES)) ERROR_BREAK(83 /*alloc fail*/); for(i = 0; i < NUM_CODE_LENGTH_CODES; i++) { - /*lenghts of code length tree is in the order as specified by deflate*/ + /*lengths of code length tree is in the order as specified by deflate*/ bitlen_cl.data[i] = HuffmanTree_getLength(&tree_cl, CLCL_ORDER[i]); } while(bitlen_cl.data[bitlen_cl.size - 1] == 0 && bitlen_cl.size > 4) @@ -1844,7 +1844,7 @@ After the BFINAL and BTYPE, the dynamic block consists out of the following: - 5 bits HLIT, 5 bits HDIST, 4 bits HCLEN - (HCLEN+4)*3 bits code lengths of code length alphabet - - HLIT + 257 code lenghts of lit/length alphabet (encoded using the code length + - HLIT + 257 code lengths of lit/length alphabet (encoded using the code length alphabet, + possible repetition codes 16, 17, 18) - HDIST + 1 code lengths of distance alphabet (encoded using the code length alphabet, + possible repetition codes 16, 17, 18) @@ -1865,10 +1865,10 @@ addBitsToStream(bp, out, HDIST, 5); addBitsToStream(bp, out, HCLEN, 4); - /*write the code lenghts of the code length alphabet*/ + /*write the code lengths of the code length alphabet*/ for(i = 0; i < HCLEN + 4; i++) addBitsToStream(bp, out, bitlen_cl.data[i], 3); - /*write the lenghts of the lit/len AND the dist alphabet*/ + /*write the lengths of the lit/len AND the dist alphabet*/ for(i = 0; i < bitlen_lld_e.size; i++) { addHuffmanSymbol(bp, out, HuffmanTree_getCode(&tree_cl, bitlen_lld_e.data[i]), @@ -5608,7 +5608,7 @@ /*jumped past tree while generating huffman tree, this could be when the tree will have more leaves than symbols after generating it out of the - given lenghts. They call this an oversubscribed dynamic bit lengths tree in zlib.*/ + given lengths. They call this an oversubscribed dynamic bit lengths tree in zlib.*/ case 55: return "jumped past tree while generating huffman tree"; case 56: return "given output image colortype or bitdepth not supported for color conversion"; diff --git a/lib/libfile.c b/lib/libfile.c index 3f3ec21..02078dd 100644 --- a/lib/libfile.c +++ b/lib/libfile.c @@ -158,7 +158,9 @@ * bytes are read. The actual read size is returned in @size. -EFBIG is * returned if the file is bigger than @max_size, but the buffer is read * anyway up to @max_size in this case. Free the buffer with free() after - * usage. + * usage. The allocated buffer is actually one byte bigger than the file + * and the extra byte is initialized to '\0' so that the returned buffer + * can safely be interpreted as a string. * * Return: 0 for success, or negative error code. -EFBIG is returned * when the file has been bigger than max_size. diff --git a/lib/ubsan.c b/lib/ubsan.c index 89ca6e5..41a5731 100644 --- a/lib/ubsan.c +++ b/lib/ubsan.c @@ -382,6 +382,26 @@ if (suppress_report(&data->location)) return; + /* This handler would be called for code shifting a one into the + * sign bit like (1 << 31), which is all too common in barebox. + * It's technically UB, but it's so prevalent that it's highly + * unlikely to be treated by a compiler as anything else than the + * standard-compliant (1U << 31). Thus check for this case here + * and ignore it selectively + */ + if (type_is_signed(lhs_type)) { + s_max lhs_int, rhs_int; + + lhs_int = get_signed_val(lhs_type, lhs); + rhs_int = get_signed_val(rhs_type, rhs); + + if (fls(lhs_int) + rhs_int == type_bit_width(lhs_type)) { + pr_debug("signed left shift of %lld by %lld ignored.\n", + (s64)lhs_int, (s64)rhs_int); + return; + } + } + ubsan_prologue(&data->location, &flags); val_to_string(rhs_str, sizeof(rhs_str), rhs_type, rhs); diff --git a/scripts/Kbuild.include b/scripts/Kbuild.include index a2dbbd8..5f03cf4 100644 --- a/scripts/Kbuild.include +++ b/scripts/Kbuild.include @@ -109,17 +109,17 @@ # Usage: cflags-y += $(call cc-option,-march=winchip-c6,-march=i586) cc-option = $(call try-run,\ - $(CC) $(KBUILD_CPPFLAGS) $(CFLAGS) $(1) -c -xc /dev/null -o "$$TMP",$(1),$(2)) + $(CC) -Werror $(KBUILD_CPPFLAGS) $(CFLAGS) $(1) -c -xc /dev/null -o "$$TMP",$(1),$(2)) # cc-option-yn # Usage: flag := $(call cc-option-yn,-march=winchip-c6) cc-option-yn = $(call try-run,\ - $(CC) $(KBUILD_CPPFLAGS) $(CFLAGS) $(1) -c -xc /dev/null -o "$$TMP",y,n) + $(CC) -Werror $(KBUILD_CPPFLAGS) $(CFLAGS) $(1) -c -xc /dev/null -o "$$TMP",y,n) # cc-disable-warning # Usage: cflags-y += $(call cc-disable-warning,unused-but-set-variable) cc-disable-warning = $(call try-run,\ - $(CC) $(KBUILD_CPPFLAGS) $(CFLAGS) -W$(strip $(1)) -c -xc /dev/null -o "$$TMP",-Wno-$(strip $(1))) + $(CC) -Werror $(KBUILD_CPPFLAGS) $(CFLAGS) -W$(strip $(1)) -c -xc /dev/null -o "$$TMP",-Wno-$(strip $(1))) # cc-version # Usage gcc-ver := $(call cc-version)