You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

vram_settings.c 2.0KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. /*
  2. * Copyright (C) 2015 Michael Brown <mbrown@fensystems.co.uk>.
  3. *
  4. * This program is free software; you can redistribute it and/or
  5. * modify it under the terms of the GNU General Public License as
  6. * published by the Free Software Foundation; either version 2 of the
  7. * License, or any later version.
  8. *
  9. * This program is distributed in the hope that it will be useful, but
  10. * WITHOUT ANY WARRANTY; without even the implied warranty of
  11. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  12. * General Public License for more details.
  13. *
  14. * You should have received a copy of the GNU General Public License
  15. * along with this program; if not, write to the Free Software
  16. * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
  17. * 02110-1301, USA.
  18. *
  19. * You can also choose to distribute this program under the terms of
  20. * the Unmodified Binary Distribution Licence (as given in the file
  21. * COPYING.UBDL), provided that you have satisfied its requirements.
  22. */
  23. FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
  24. #include <ipxe/uaccess.h>
  25. #include <ipxe/settings.h>
  26. /** @file
  27. *
  28. * Video RAM dump
  29. *
  30. */
  31. /** Video RAM base address */
  32. #define VRAM_BASE 0xb8000
  33. /** Video RAM length */
  34. #define VRAM_LEN \
  35. ( 80 /* columns */ * 25 /* rows */ * 2 /* bytes per character */ )
  36. /**
  37. * Fetch video RAM setting
  38. *
  39. * @v data Buffer to fill with setting data
  40. * @v len Length of buffer
  41. * @ret len Length of setting data, or negative error
  42. */
  43. static int vram_fetch ( void *data, size_t len ) {
  44. userptr_t vram = phys_to_user ( VRAM_BASE );
  45. /* Copy video RAM */
  46. if ( len > VRAM_LEN )
  47. len = VRAM_LEN;
  48. copy_from_user ( data, vram, 0, len );
  49. return VRAM_LEN;
  50. }
  51. /** Video RAM setting */
  52. const struct setting vram_setting __setting ( SETTING_MISC, vram ) = {
  53. .name = "vram",
  54. .description = "Video RAM",
  55. .type = &setting_type_base64,
  56. .scope = &builtin_scope,
  57. };
  58. /** Video RAM built-in setting */
  59. struct builtin_setting vram_builtin_setting __builtin_setting = {
  60. .setting = &vram_setting,
  61. .fetch = vram_fetch,
  62. };